[recovery mode] Безопасная работа с php
Доброго времени суток, Хабрахабр! В предыдущем посту я немного наговнокодил неправильно отнёсся к безопасности своего php кода. Добрые хабражители сказали, что мне почитать и заминусовали. Теперь хотелось бы исправиться, а заодно рассказать тем, кто только начал учить php, как лучше работать с данными в php.Предупреждение: статья рассчитана на новичков, поэтому, если Вы гуру php, можно листать дальше и не писать в комментариях, что тут описываются банальные вещи.
Храните пароли и другие данные в зашифрованном видеВ php есть замечательная функция md5(), которая позволяет в одностороннем порядке получать из Вашей секретной фразы некий набор символов. Например, слово Хабрахабр станет набором 4a8ceaec90d1bf03bb0dee7b34034f7a.Для дополнительной защиты Вашей секретной строки можно использовать добавочный код для шифровки md5: $key = «Secret key»; // наша ключевая фраза $str = «Secret str»; // то, что нужно зашифровать $result = $str.$key; // складываем echo md5($result); // используем md5 код от сложения Таким образом, даже, если злоумышленник доберётся до Вашей базы данных с паролями — он не сможет узнать пароль, перебирая хешы известных фраз.Так же можно складывать md5 хешы ключевой фразы и строчки, которую нужно зашифровать и брать md5 от их суммы: $key = md5(«Secret key»); $str = md5(«Secret str»); $result = $str.$key; echo md5($result); Защищайте строки от опасных данных Допустим, у нас есть форма входа на сайт, в которой нужно ввести логин и пароль. А что, если злоумышленник поставит в один из input-ов закрывающую кавычку и дальше напишет свой вредоносный код? В лучшем случае, он получит доступ к базе данных данных, а нам этого бы совсем не хотелось.Что бы это предотвратить, в php есть функция str_replace ():
$str = «Text'»; // Полученный текст с кавычкой echo str_replace (»'»,», $str); // Выведет текст без кавычки Кроме этого, очень часто бывает такое, что нужно избавиться от всех (или не всех) html-тегов. Примером этому может служить форма комментирования на сайте, с помощью которой злоумышленник сможет встроить орденоносный js или сделать другую пакость. Решением этого является функция strip_tags ().С её помощью можно убрать как все теги из текста:
$str = »Text'»; echo strip_tags ($str); Так и оставить разрешенные (например, для создания жирного текста и курсива): $str = »Text'»; echo strip_tags ($str, ''); Напоследок Эта функция не служит для безопасной отправки данных, скорее наоборот — для безопасного отображения данных: очень часто бывает, что нужно написать некий email на сайте, и не всегда хочется (и есть возможность) делать его в виде картинки. Что бы он не попал в щупальца спам-ботам у php есть хорошая функция chr (), которая закодирует наш email в ASCII-код, и функция ord (), которая раскодирует его обратно.Для этого напишем функцию:
function secretMail ($mail) { $result = ''; $mail = 'mailto:' . $mail; for ($i=0; $i < strlen($mail); $i++) { $result .= '