Безопасная работа с 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 = "<b>Text</b>'";   echo strip_tags($str); 

Так и оставить разрешенные (например, для создания жирного текста и курсива):

  $str = "<b>Text</b>'";   echo strip_tags($str, '<i><b>'); 

На последок

Эта функция не служит для безопасной отправки данных, скорее наоборот — для безопасного отображения данных: очень часто бывает, что нужно написать некий email на сайте, и не всегда хочется (и есть возможность) делать его в виде картинки. Что бы он не попал в щупальца спам-ботам у php есть хорошая функция chr(), которая закодирует наш email в ASCII-код, и функция ord(), которая раскодирует его обратно.

Для этого напишем функцию:

  function secretMail($mail) { 		$result = ''; 		$mail = 'mailto:' . $mail; 		for ($i=0; $i < strlen($mail); $i++) {  			$result .= '&#' . ord(substr($mail, $i, 1)) . ';'; 		} 		return $result; 	} 

Теперь мы можем ею воспользоваться:

  echo '<a href="' . secretMail('mail@domain.com') . '">Secret mail address</a>'; 

В результате, если посмотреть исходный код страницы мы увидим:

Конечно, это остановить не всех спам-ботов, но какая-то часть всё равно отсеется.

Надеюсь, эта статья поможет совсем новичкам в php не делать глупых ошибок и использовать его безопасно.

ссылка на оригинал статьи http://habrahabr.ru/post/232331/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *