Сэм, если вы храните входные данные в базе данных, чтобы избежать внедрения SQL и XSS, тогда этих двух функций достаточно.Если вы храните пароли, вы должны зашифровать пароли с помощью одностороннего шифрования (то есть они не могут быть расшифрованы).
Позвольте мне расширить мой ответ: во-первых, SQL-инъекция - это метод, при котором вредоносный кодПользователь попытается изменить ваш оператор SQL, чтобы он выполнял свою волю.Например, допустим, у вас есть форма для входа.Вставив одно из следующих значений в незащищенную форму, я смогу войти в первую учетную запись, не зная имени пользователя или пароля:
' or 1=1 --
Существует много версий вышеупомянутого внедрения.Давайте рассмотрим, что он делает с SQL, выполняемым в базе данных:
PHP: mysql_query ("ВЫБЕРИТЕ * ОТ ПОЛЬЗОВАТЕЛЕЙ, ГДЕ username = '". $ Username. "' AND password = '". $ Password. "'; ");
При выполнении вышеизложенного в базу данных отправляется следующий SQL:
SELECT * FROM users WHERE username='' or 1=1-- ' AND password='' or 1=1--';
Эффективная часть этого SQL: SELECT * FROM users WHERE username= '' или 1 = 1
, поскольку двойная черта (с пробелом после) является комментарием, удаляющим остальную часть утверждения.
Теперь это дает злоумышленнику доступ.Используя экранирующую функцию, такую как mysql_real_escape_string, вы можете экранировать содержимое, чтобы в базу данных отправлялось следующее:
SELECT * FROM users WHERE username='\' or 1=1-- ' AND password='\' or 1=1--';
, которое теперь экранирует кавычки, создавая предполагаемые строки, только эти строки.
Теперь давайте рассмотрим некоторые XSS.Другой злоумышленник хотел бы изменить макет страницы.Хорошо известной атакой XSS была атака Facespace на Facebook еще в 2005 году. Это включает вставку необработанного HTML в формы.База данных сохранит необработанный HTML, а затем будет отображаться пользователям.Злонамеренный пользователь может вставить некоторый javascript с использованием тега script, который может сделать все, что может сделать javascript!
Этого можно избежать путем преобразования <и> в соответственно.Для этого вы используете функцию html_special_chars.
Этого должно быть достаточно для обеспечения нормального содержимого сайта.Однако пароли - это отдельная история.
Для паролей вы также должны зашифровать пароль.Для этого рекомендуется использовать функцию шифрования PHP.
Однако, если пароль зашифрован и сохранен в базе данных в качестве зашифрованного пароля, как вы можете расшифровать его, чтобы убедиться в его правильности?Простой ответ - вы не расшифруете это.СОВЕТ: Пароль всегда шифруется с одним и тем же значением.
Вы думали: «Мы можем зашифровать пароль, когда пользователь входит в систему и сравнить его с паролем в базе данных», вы правы ...