Я обычно использую эту функцию для очистки моих исходных данных формы прежде, чем сохранить их в мою базу данных:
//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}
До сих пор я не понял это mysql_real_escape_string
требуемый соединение с базой данных, поскольку я только использовал его, когда я чистил данные прежде, чем сохранить его в базу данных.
Я попытался использовать функцию на форме контакта и получил "Ссылку на сервер, не мог быть установлен" ошибка. Я мог соединиться с базой данных, но нет никакой потребности, потому что я просто пытаюсь санировать данные, прежде чем это будет отослано в мою электронную почту через форму контакта.
Что лучший способ состоит в том, чтобы санировать данные, это не хранится в mysql базе данных, и эти данные должны все еще быть санированы?
используйте filter_var ()
http://php.net/manual/en/function.filter-var.php
например, если вы хотите очистить электронную почту :
$_POST['email'] = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
к сообщению
$_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING);
достаточно
Цель санации данных с помощью mysql_real_escape_string
- избежать SQL-инъекций. Если вы не используете SQL, вы уже защищены.
Мужчины не болеют раком шейки матки.
Используйте функцию санации, соответствующую специальным символам, которых вам нужно избежать. В идеале, не обрезайте то, что не причинит вреда.
Вся концепция неверна. Эта функция не помогает ни для электронной почты, ни даже для базы данных.
mysql_real_escape_string ничего не «дезинфицирует». Это просто разделители escape и ничего больше. Просто для предотвращения синтаксических ошибок, если у вас есть разделитель в ваших данных:
SELECT * FROM table WHERE name = 'it's me' # error!
после экранирования данных ваши данные становятся «это я»
, и ошибки нет.
Следовательно, эта функция работает только с SQL-запросом и только с данными, заключенными в кавычки .
Таким образом, нет смысла делать просто mysql_real_escape_string без кавычек.mysql_real_escape_string следует использовать
а) в одиночку. такие вещи, как обрезка или косые черты, здесь ни при чем
б) непосредственно перед составлением строки запроса, а не где-либо еще
в) только с данными, которые будут заключены в кавычки.
г) все остальные данные нуждаются в других способах очистки
Что касается электронной почты, вам не требуется никакой очистки, если вы отправляете ее как обычный текст.
Единственная предосторожность, которую вы должны предпринять, - это против внедрения почты
Но это не имеет большого значения. Просто поместите вводимые пользователем данные только в тело сообщения. не в тему, в или из или в любой другой заголовок. Только тело сообщения. И вы в безопасности