2010-01-09 2 views
1

В моей таблице MySQL у меня есть столбец типа TEXT. В моей HTML-форме пользователь вставляет текст в него, который может содержать «», «() и т. Д.). Я хочу знать, как безопасно выполнять Insert Query, если эти символы существуют в тексте и могут привести к сбою выполнения запроса.Обработка котировок и команд в строке SQL

Как правильно обращаться с ними в PHP?

ответ

3

Использовать prepared statement.

Подготовленные заявления могут помочь увеличить безопасности путем отделения SQL логики от данных подается. Это разделение логики и данных может помочь предотвратить очень распространенный тип уязвимости , вызванный SQL-инъекцией атака. Обычно, когда вы имеете дело с с запросом ad hoc, вы должны быть очень осторожны при обращении с данными , которые вы получили от пользователя. Это влечет за собой использование функций, которые выходят из всех необходимых проблем символов, таких как одиночная кавычка, двойная кавычка и обратная косая черта символов. Это необязательно, если имеет отношение к подготовленным операторам. Разделение данных позволяет MySQL автоматически учитывать эти символы , и они не обязательно должны быть экранированы с использованием любой специальной функции.

Быстрый пример,

$db = new mysqli('localhost', 'username', 'password', 'db'); 
$stmt = $db->prepare("INSERT INTO mytable (text_column) VALUES (?)"); 
$stmt->bind_param("s", $mytext); // s = string, b = boolean, i = int, etc 
$stmt->execute(); 
... 
+0

Хороший совет для использования подготовленных операторов, но старое расширение mysql для PHP не поддерживает их. Вы должны использовать MySQLi или PDO_MySQL. –

+0

Хорошее место, я пропустил «я». Я обновил ответ, спасибо. –

4

Если вы не используете подготовленные заявления (либо с PDO или MySqli), вы должны пройти входной профиль корыта MySql_Real_Escape_String() функцию. Или MySqli_Real_Escape_String(), если вы используете MySqli (но не подготовленные заявления).

Я бы посоветовал вам использовать prepared statements, так как ваша жизнь будет намного проще, и вы получите бесплатную защиту от SQL-инъекций.