Сигурно криптиране

DownFall

Registered
Код:
function pwd_encrypt($pwd, $salt = NULL)
{
	if(empty($salt))
		return hash('sha256', md5($pwd));
	
	return hash('sha256', md5($pwd) . $salt);
}

Има ли смисъл да правя още схеми за криптиране или това е достатъчно? Как мислите, дали е достатъчно надеждно, така че да защитя паролите на потребителите си, в случай че база данните бъде компрометирана?
 
Не може да се даде правилен отговор, когато не знаеш какъв е сайта. Първо трябва да изясниш какво искаш за защитиш и после да избереш правилата защита.

Ако ти "разбият" базата, с какво "хакера" може да навреди на потребителите ти - да им праща спам или да им източи банковите сметки?

Не ходиш на лов за пъдпъдъци с автомат Калашников, нали? Нито пък на лов за глигани - с лък и стрели? Като си купиш телевизор от Технополис, може и в багажника на Трабанта да го сложиш, не ти трябва ТИР. Ако колатата ти е за 14 цолови гуми, има ли смисъл да и слагаш 25 цолови? И обратно.

Ако работиш по онлайн банкирането на някоя банка, това дето си го показал, може и да не е достатъчно. Ако сайта е за кварталните тийнове - да пишат коментари под пиратските песни за сваляне - тоя код е абсолютно излишен. Ако ще съхраняваш информация за кредитни карти на клиентите, или пък прекалено много лична информация - ОК, иначе може дори и да нямаш нужда от криптиране.

На така зададения въпрос, няма как да се даде конкретен отговор. Грешна инфромация на входа - неясна информация на изхода.
 
@exec няма значение какъв сайт правиш. Хеширането трябва да е на ниво. Ако е сайт за тийнове както се изрази и някой от тези тийнове си е ползвал същата парола на много места можеш спокойно да му влезеш в пощата, а оттам и навсякъде, където се е регистрирал (може дори да ползва тая поща за интернет банкиране, няма от къде да знаеш).

Винаги трябва да внимаваш с паролите иначе рискуваш да навредиш на доста хора, без значение какъв ти е сайта.

А в случая няма как да е излишно. Ще спестиш няколко микросекунди и какво? А алтернативата е някой да вземе паролите на всичките ти потребители. Иначе това е достатъчно според мен. Имаш sha256 върху дългия резултат (в сравнение със самата парола) от md5 + сол.

ПП. Не съм ходил на лов за пъдпъдъци, но с Калашников няма ли да ти е по-лесно отколкото с лък и стрели? :D
 
....ползвал същата парола на много места можеш спокойно да му влезеш в пощата, а оттам и навсякъде....

Аз не считам, че съм отговорен за глупостта на потребителите и не мога да ги предпазя от техните собствени действия, ако те не се пазят. Не съм виновен, за това, че някой има ниска интернет култура. Банкова сметка (особено карта) може да се източи, без въобще потребителя някога да е използвал интернет.

В бизнес-ориентирани уеб приложения, винаги бих ползвал сериозна защита. В сайтове, съдържащи лична информация дори закона ме задължава (ЗЗДЛ). Но в сайт за "хумор, сатира и забава", дори не бих криптирал паролите.
 
Дискусията е излишна!
Без да защитавам @exec искам да кажа, че да ползваш еднаква парола е върховна глупост, която според мен трябва да се НАКАЗВА. В интернет има достатъчно много да ги наречем дивилопъри, които се отнасят изключително безотговорно към съхраняването на данните, да не говорим че въвеждайки парола някъде, няма никаква гаранция, че тази парола не се вижда от администраторите. Като знаем на повечето места какво е текучеството на технически персонал можем да си представим колко лесно паролите изтичат.
Практиката обаче е показала, че най-честия начин за хакване е през логически или технически проблем на системата, а не чрез декриптиране. Но в защита на по-сериозното хеширане мога да спомена, че в началото на един от проектите ми се намери потребител, който се регистрира в системата и с неговата парола, която той си я знае започна през URL да се опитва да напипа начина ми на хеширане на някои данни, които съм решил да скрия. Честно казано, ако тогава имах много потребители, можеше и да изпусна този момент в логовете, но от тогава подсилих хеша и направих автоматичен бан, за да блокирам такива опити за хакване "от вътре".
Така че и двамата имате право, но в настоящия момента аз вече не ползвам еднакви пароли, такива които са по-къси от 15 символа и такива които да могат да се възстановят по памет.
 
exec каза:
....ползвал същата парола на много места можеш спокойно да му влезеш в пощата, а оттам и навсякъде....

Аз не считам, че съм отговорен за глупостта на потребителите и не мога да ги предпазя от техните собствени действия, ако те не се пазят. Не съм виновен, за това, че някой има ниска интернет култура. Банкова сметка (особено карта) може да се източи, без въобще потребителя някога да е използвал интернет.

В бизнес-ориентирани уеб приложения, винаги бих ползвал сериозна защита. В сайтове, съдържащи лична информация дори закона ме задължава (ЗЗДЛ). Но в сайт за "хумор, сатира и забава", дори не бих криптирал паролите.

С 5 реда код можеш да ги предпазиш поне от част от тези техни действия. Какво ти пречи да го направиш? Имай в предвид, че не всеки е образован в тази сфера, още по-малко хората, които посещават сайтове за "хумор, сатира и забава". Огромно количество хора си ползват ЕГНтата за парола или някаква четирицифрена комбирация. Това не значи, че трябва да им се влиза в пощите или който и да било профил.

Защо да не предпазиш някой от нещо лошо, било то и следствие от неговото невежество в тази област, когато можеш? На мен няма да ми е много приятно да влезе някой в пощата на някой роднина примерно, понеже се е регистрирал в друг сайт със същата парола. А хората, които не ползват много интернет не виждат смисъл от многото пароли, защото смятат, че се съхраняват сигурно.

Това е като да блъскаме кучета по улиците, защото не могат да се опазят сами. И да кажеш, че са си го заслужили. И аз ползвам една парола за WT и няколко други сайта и няма да ми е много приятно някой да ми влезе в профила и да почне да спами, защото съм се регнал в сайт за вицове, нали? Не мога да помня 50 пароли за всичките регистрации по сайтове дето имам. А да си ги записвам някъде е още по-глупаво, нали?
 
Няма нужда да ги помниш - прочети предишното мнение. Тук не говорим за образованост, а за интернет култура.

Примера с кучетата не беше удачен, защото те не знаят как да се пазят - автомобилите не са от техния "естествен" свят. Потребителите са длъжни да помислят за своята сигурност, защото много добре са запознати с рисковете.
 
exec каза:
Няма нужда да ги помниш - прочети предишното мнение. Тук не говорим за образованост, а за интернет култура.

Примера с кучетата не беше удачен, защото те не знаят как да се пазят - автомобилите не са от техния "естествен" свят. Потребителите са длъжни да помислят за своята сигурност, защото много добре са запознати с рисковете.

И ти си длъжен да помислиш за тяхната сигурност, щом ги съхраняваш. Много хора не осъзнават рисковете, тъй като Интернета не е от техния естествен свят. В момента разсъждаваш като псевдо-хакерите дето биха хакнали всеки сайт с дупка в сигурността и биха се оправдали, че си го заслужават, защото са пропуснали нещо при защитата.

Пак казвам, че нищо не ти пречи да бутнеш 5 реда код за 5 секунди, с което да предпазиш потребителите си от грешките им. Нищо не ти коства, не ти взима пари, не ти отнема време. Не виждам проблема да хешираш паролите във всеки сайт, който правиш. Представям си го само като вид отмъщение за невежеството на някои хора, но това най-малкото не е етично. Тези дето въртят телефонни измами на стари хора мислят по същия начин. Силно се надявам да не обидя някой, но това е лично мнение и не мога да си представя как един вид ще наказваш някой за нещо, което не знае.
 
Хакер и Кракер са две различни неща.

Защитата е комплексно понятие, включващо много аспекти - както програмиста трябва да прояви здрав разум, така и потребителя. Ти като си паркираш колата на улицата, заключваш ли я или я оставяш отключена, защото е застрахована и съответно застрахователя да му мисли. Ама застрахователя е помислил и с общите условия си се съгласил да си добър стопанин. Всеки сайт също има общи условия, но кой ли ги чете.
 
exec каза:
Хакер и Кракер са две различни неща.

Защитата е комплексно понятие, включващо много аспекти - както програмиста трябва да прояви здрав разум, така и потребителя. Ти като си паркираш колата на улицата, заключваш ли я или я оставяш отключена, защото е застрахована и съответно застрахователя да му мисли. Ама застрахователя е помислил и с общите условия си се съгласил да си добър стопанин. Всеки сайт също има общи условия, но кой ли ги чете.

Ако имаше начин да заключваш автоматично колата на всички, които си застраховал, без да си мръднеш пръста не би го правил, така ли?

Пак те питам - какво ти пречи да сложиш още 5 реда и да предотвратиш нещо лошо за друг?
 
StormBreaker каза:
Ако имаше начин да заключваш автоматично колата на всички, които си застраховал, без да си мръднеш пръста не би го правил, така ли?
По този начин ще им наруша и огранича правата на потребители по отношение на продукта/услугата, който/която ползват.

StormBreaker каза:
Пак те питам - какво ти пречи да сложиш още 5 реда и да предотвратиш нещо лошо за друг?
Абсолютно нищо не ми пречи, правя го, но само когато има смисъл. Друг е въпроса, че конкретно този код, който е показан, е леко сбъркан, защото NULL != empty, но този програмист едва ли го осъзнава. За това казвам, че сигурността е комплексно понятие.
 
15 отговора в темата и само един, който отговаря на въпроса ми? Благодаря, @StormBreaker.

Коментарите тип "това е излишно" или "не ги хеширай" са излишни. Аз, като собствен на сайт, се смятам за длъжен да защитя максимално потребителските пароли, дори и да бъде компрометирана база данните. За тази цел, хеширането им е жизнено важно и държа да бъде на ниво.

Да, не мога да предпазя потребителите си от тяхната собствена глупост. Те могат и паролите да си раздават наляво-надясно - каквито и методи да приложа в такива случай са безполезни, НО това не значи, че не трябва да направя всичко възможно да осигуря надеждното съхранение на паролите им.

Умишлено не се впуснах в обяснение, за да избегна излишния спам.. Няма значение за какъв сайт става въпрос. Въпроса беше кратък и ясен - може ли да се разчита на този вид хеширане. Ако реша да се консултирам с някой кое е излишно и кое не, ще ви поискам мнението по въпроса, на повечето писали в темата.
 
@exec много лекомислени разсъждаваш. Примерите, които даваш нямат нищо общо със сайтовете. Тъй като ти си програмист, а те обикновени потребители, то ти си длъжен да направиш максимална защита за данните, които ти дават потребителите, защото това, че не хешираш техните пароли е твоя глупост, а не на потребителите.
С примера за застраховките на колите - ами, застрахователната компания е направила максималното за нейните услуги, оттам нататък ти му мислиш. Това, че ти си си оставил колата отключена е твой проблем, а не техен. Както и за паролите - ти правиш всичко възможно да ги предпазиш, а това, че те си дават наляво и надясно паролата си е техен проблем. Това вече теб не те бърка.

И както каза @Storm, както на кучетата, колите не са им в естествената среда, така и на обикновения потребител програмирането не му е в естествената среда.
Разликата е там, че ти виждаш отвътре нещата как работят, защото ти изграждаш сайта, но те си нямат представа как е изграден сайта.
Те не знаят дали ти им хешираш паролите, а някои даже не знаят какво е да се хешира парола. Така че, това е изцяло твоя отговорност да направиш сайта си максимално защитен.
 

Back
Горе