Безопасная работа с php

в 12:48, , рубрики: 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 не делать глупых ошибок и использовать его безопасно.

Автор: pingvi69

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js