2013-09-20 2 views
-4

Каков наилучший способ для дезинфекции этой STRING для предотвращения внедрения SQL?Лучший способ для дезинфекции струн PHP

$order_by_str = 'dest ASC'; 

EDIT

$whitelist = array('start','target','exec'); 

    if (in_array($order_by, $whitelist)) { 
    $order_by_str = $order_by; 
} else { 
    $order_by_str = 'start'; 
} 

Я теперь это, кажется, работает для меня.

+0

возможно дубликат [Что это лучший способ дезинфицировать ввода пользователя с PHP?] (Http://stackoverflow.com/questions/129677/whats-the-best-method -for-sanitizing-user-input-with-php) –

+0

Возможный дубликат [Как предотвратить SQL-инъекцию в PHP?] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql -injection-in-php) – tlenss

+0

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

ответ

1

Данные ответы не отвечают на вопрос.

Несмотря на то, что для общей цели «строгая дезинфекция» не существует способа, можно заметить, что данная строка является очень специальной.
И единственный способ его дезинфекции Белый список.

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

Таким образом, вместо того, чтобы иметь эту целую цепочку, я бы получил ее в двух переменных: $_GET['orderby'] и $_GET['dir'].
И поэтому код будет

$allowed = array("dest","foo","whatever"); 
$key  = array_search($_GET['orderby'], $allowed)); 
$orderby = $allowed[$key]; 

$dir  = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; 

$query = "SELECT * FROM t ORDER BY $orderby $dir"; 
-2
$order_by_str = mysql_real_escape_string('dest ASC'); 

Надеюсь, это то, что вы ищете !!!

+0

нет, я тоже получаю сообщение об ошибке, если поставить «за» заявление и получить ошибку MySQL –

+0

после сценария, который вы используете –

+0

, это НЕ он ищет, и он ничего не дезинфицирует. –

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