2013-06-05 6 views
0

Итак, я работал над API для небольшого побочного проекта, и все входные данные пользователя не будут напрямую использоваться для SQL или отображаться для пользователей, поэтому мне нужно его дезинфицировать? Если я сделаю, что мне делать в точности?Когда вы не дезинфицируете данные?

В настоящее время я проверяю, являются ли они целыми числами, строками, массивами и т. Д., Но кроме этого есть что-то еще, что мне нужно сделать?

+0

для использования базы данных, вам не нужно дезинфицировать данные, если вы используете [параметризованные утверждения] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php/ 60496 # 60496) – mvp

+0

Вы взвешиваете риск того, что может произойти, и насколько это возможно. У Security.stackexchange.com, вероятно, будут хорошие ответы на эту тему. –

+0

В идеале вы не доверяете и дезинфицируете все, что исходит из userland .. и все остальное, вы по-прежнему принимаете с собой щепотку соли и считаете, что это возможно для санитарии – Pudge601

ответ

1

Вопрос всегда с какой целью? Если вы просто принимаете значения, которые вы получаете от пользователя, и вы не делаете do что-нибудь с ними (вы просто храните и показываете их), тогда нечего дезинфицировать. Если вы дадите этим значениям «активно» сделать «что-то, вы можете захотеть их дезинфицировать, чтобы они не делали то, что вам не нравится.

Например, вы принимаете HTML-ввод от пользователя и хотите HTML-формат, но вы хотите избежать проблем с XSS; в этом случае вам захочется выборочно удалять HTML-элементы, т. е. вы хотите дезинформировать входные данные.

// some HTML is allowed, but not everything 
echo remove_unwanted_html_elements($_POST['content']); 

Если Ото вы не позволяете HTML вход должен интерпретироваться в любом случае, то есть независимо от посты пользователя только отображается буквально к нему без каких-либо интерпретируется как HTML, то вам не нужно дезинфицировать ничего. Вам может понадобиться только побег содержание в соответствии с его целевым форматом.

// don't care what the user enters, just display it right back as is 
echo htmlspecialchars($_POST['content']); 

Санитарная относится только если вы оценить значение в каком-то не вполне предсказуемым образом. Санитария означает принять значение и изменить это во что-то еще, обычно удаление что-то от него. Это должно быть очень целенаправленным и целенаправленным, поскольку это может быть очень подверженная ошибкам операция; вы не просто дезинфицируете данные как-то только потому, что. Другая альтернатива проста: валидация, то есть проверка того, что значение соответствует ожидаемым нормам, а иначе отклоняет.

Даже с предполагаемым номером, введенным пользователем и отличным от int, это очень простая форма дезинфекции; это эффективно, так как это означает, что вы гарантированно получите безвредный номер , но этот номер может иметь или не иметь ничего общего со стоимостью, которую пользователь представил. Валидация может быть лучшим вариантом здесь.

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

  • Нет связанных вопросов^_^