2009-10-15 7 views
1

Я просто думаю о том, как лучше всего дезинформировать мои данные, чтобы предотвратить инъекции. Некоторым людям нравится санировать сразу перед выходом или непосредственно перед вставкой в ​​базу данных ... но проблема, которую я вижу с этим, двояка: (1) что, если вы пропустите параметр/переменную? (2) что, если вы чрезмерно дезинфицируете? Не то, чтобы это повредило выход, но не так много здравого смысла, что вы уже знаете, это безопасно.Если я только дезинфицирую данные GET и POST, я буду в безопасности от инъекций?

Например, в PHP вместо использования $_GET и $_POST не мог я обернуть тех, кто что-то вроде:

function get($var) { 
    return my_sanitizer($_GET[$var]); 
} 

Или это не достаточно? Где еще может проникнуть вредоносный код?

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

ответ

5

Там больше, чем один вид обеззараживание, и более, чем один вид инъекции. Например, вы обычно захотите дезинфицировать или вытеснить HTML и JS до выхода. Но подходящий выбор (например, удаление всех HTML, позволяющих HTML в белом списке, заставляя пользователя вводить что-то другое или просто избегать его, чтобы он отображался как текст) зависит от приложения.

Что касается инсталляции базы данных, я согласен с Nate, что вы должны использовать подготовленные инструкции для этого (иногда они используют экранирование внутри, но это не ваша проблема).

Таким образом, самодельный улавливающий my_sanitizer, который вы запускаете сразу после получения любых данных, вероятно, является неправильным выбором.

+0

Справа. Моя голова не должна быть ввернута правильно: p Я знаю, что есть разные виды инъекций, но по какой-то причине я думал, что удаление или замена '<> &" 'будет делать трюк во всех случаях. Думаю, это зависит от того, что вы делаете с этими данными. – mpen

1

Лично я всегда садился прямо перед вставкой в ​​вашу базу данных; при этом, если у вас есть база данных SQL, базирующаяся на SQL, и sprocs - это способ, чтобы вы не вводили ничего, что может нанести вред.

1

вы можете сделать Еогеасп для массива $ _POST или $ _GET и дезинфицировать все

foreach($_POST as $key){ 

$_POST[$key] = addslashes($_POST[$key]) }

+0

Кроме этой функции не рекомендуется. Вы должны использовать специфичную для базы данных функцию, такую ​​как mysqli_real_escape_string() или лучше хранимые процедуры. –

+2

Также санитирование не только для SQL, вам нужно иметь HTML и JS, если вы выводите его на страницу. – rslite