Санируйте форму контакта без mysql_real_escape_string

Я обычно использую эту функцию для очистки моих исходных данных формы прежде, чем сохранить их в мою базу данных:

//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 базе данных, и эти данные должны все еще быть санированы?

7
задан Brooke. 9 August 2010 в 05:06
поделиться

3 ответа

используйте 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);

достаточно

15
ответ дан 6 December 2019 в 15:17
поделиться

Цель санации данных с помощью mysql_real_escape_string - избежать SQL-инъекций. Если вы не используете SQL, вы уже защищены.

Мужчины не болеют раком шейки матки.

Используйте функцию санации, соответствующую специальным символам, которых вам нужно избежать. В идеале, не обрезайте то, что не причинит вреда.

1
ответ дан 6 December 2019 в 15:17
поделиться

Вся концепция неверна. Эта функция не помогает ни для электронной почты, ни даже для базы данных.

mysql_real_escape_string ничего не «дезинфицирует». Это просто разделители escape и ничего больше. Просто для предотвращения синтаксических ошибок, если у вас есть разделитель в ваших данных:

SELECT * FROM table WHERE name = 'it's me' # error!

после экранирования данных ваши данные становятся «это я» , и ошибки нет.
Следовательно, эта функция работает только с SQL-запросом и только с данными, заключенными в кавычки .

Таким образом, нет смысла делать просто mysql_real_escape_string без кавычек.mysql_real_escape_string следует использовать
а) в одиночку. такие вещи, как обрезка или косые черты, здесь ни при чем
б) непосредственно перед составлением строки запроса, а не где-либо еще
в) только с данными, которые будут заключены в кавычки.
г) все остальные данные нуждаются в других способах очистки

Что касается электронной почты, вам не требуется никакой очистки, если вы отправляете ее как обычный текст. Единственная предосторожность, которую вы должны предпринять, - это против внедрения почты
Но это не имеет большого значения. Просто поместите вводимые пользователем данные только в тело сообщения. не в тему, в или из или в любой другой заголовок. Только тело сообщения. И вы в безопасности

-1
ответ дан 6 December 2019 в 15:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: