2013-10-04 4 views
1

Это мое первое участие в этом замечательном сайте, поэтому я надеюсь получить первый отличный ответ на мой вопрос. Я использую следующий код для вставки данных в базу данных MySQL:PDO подготовил заявление безопасности

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) 
{ 
$q = $conn->prepare("INSERT INTO client (name, address) VALUES (:name, :address)"); 
$q->bindValue(':name', htmlspecialchars($_POST['name']), PDO::PARAM_STR); 
$q->bindValue(':address', htmlspecialchars($_POST['address']), PDO::PARAM_STR); 
$q->execute(); 
} 

ли вставка достаточно безопасно? Должен ли я использовать htmlspecialchars() момент вставки или момент отображения данных?

Сердечные приветы

+0

Я всегда с осторожностью отношусь к безопасности, поэтому разделил бы вход. Вы вставляете непосредственно в базу данных из формы здесь, так что, вероятно, хорошая идея проверить данные. – dwjv

+0

@ dwjv Я уверен, что, не проверив, действительно ли значение isset(), вы получите сообщение об ошибке. Нет ничего плохого в том, чтобы убедиться, что значение установлено, а также убедиться, что это правильное значение. –

+1

См. Http://stackoverflow.com/a/60496/760211, что значение по умолчанию для драйвера PDO MySQL - это __получение подготовленного оператора__. Вы можете отключить «эмуляцию» для лучшей безопасности. – Kita

ответ

3

Да ваш код безопасен, но как общее правило, хранят данные в нейтральной форме. То есть, не кодируется для какого-либо конкретного выхода или носителя. Сделайте кодировку на выходе вне.

Если вы должны были сделать обратное и передать его через htmlspecialchars() перед хранением (например, ваш код в вопросе), то ваши данные привязаны специально для вывода в HTML. Если вы хотите вывести его в другом месте (например, XML-документ), где htmlspecialchars() не применимо, вам придется его сначала декодировать.

+0

Да! 'htmlspecialchars' предназначен для * отображения * форматирования, а не для кодирования для хранения. Его следует вызывать, когда контент нужно визуализировать. – tadman

+0

Большое спасибо за ответ, но не могли бы вы рассказать мне, что вы подразумеваете под «нейтральной формой»? Кроме того, что вы предлагаете? как я могу изменить код выше? – Anibel

+0

По нейтральной форме я имею в виду только в необработанном виде (без обработки из 'htmlspecialchars()'). Я бы просто удалил вызов htmlspecialchars() из вашего кода и оставил его как есть. Не забудьте сделать вызов 'htmlspecialchars()' при выводе данных и отображении его в HTML. – MrCode

Смежные вопросы