2010-10-04 11 views
0

Я написал код .. но теперь я не знаю, какая версия лучше. Есть ли возможность couse 1-й версии, мой код уязвим?escaping input in php

Версия 1:

$destination = $_POST['var']; 
$destination = strip_tags(trim($destination)); 

Версия 2:

$destination = strip_tags(trim($_POST['var'])); 
+1

На стороне примечания: Personnaly, я бы 'trim' _after_' strip_tags', потому что вы все равно можете получить пробелы с обеих сторон после удаления тегов из уже обрезанной строки (например, с помощью '

< - см. пробел после>

'. – Wrikken

+0

. Хороший вопрос .. но я думаю, он будет работать отлично для меня, как есть .. спасибо! – arturs

+0

Надеюсь, это ускользание не для базы данных ... –

ответ

4

Как ни strip_tags, ни trim изменения входной строки, нет абсолютно никакой разницы между этими двумя версиями.

0

Они оба точно такие же.
Что вы избегаете ввода? База данных? XSS?

+0

Я бы сказал, что оба. .. но после этого я использую mysql_real_escape_string для db .. – arturs

0

Оба фрагмента абсолютно одинаковы. Некоторые люди скажут, что первый из них лучше для читаемости, и некоторые люди скажут, что второй лучше для краткости.

0

Обе версии означают SAME, вы можете использовать любой. По-моему, вы должны использовать filter_var, чтобы фильтровать входную строку ...

-2

Ну, strip_tags все еще могут быть использованы. Несколько лучшим решением может быть следующее:

$destination = htmlentities(trim($_POST['var'])); 

Однако это еще не достаточно, дополнительная работа должна быть выполнена, если $ _POST [ «переменная»] будет идти в базу данных.

Убедитесь, что вы понимаете, что именно делает htmlentities(), прежде чем внедрять его в свой код на уровне производства.

+0

Я прочитал один раз тему об этом ... и кто-то сказал, что он может испортить databese, если он будет заполнен " и т. д., и я тоже использую mysql_real_ecape_string. – arturs

+0

Это не собирается «испортить базу данных», но «htmlentities()» не имеет абсолютно никакого отношения к вводу; i t только полезно для выхода из вывода. – meagar

+0

Причина, по которой я предположил htmlentities(), когда вход выводится из базы данных .. strip_tags() ничего не сделает для предотвращения XSS или других уязвимостей в этом случае. – Bassem

0

Обе версии одинаковы с точки зрения уязвимости. Если инъекция - это то, о чем вы беспокоитесь, вы можете включить addlashes().

Что лучше? Версия 2 на самом деле будет работать быстрее. Установка переменной в другую - просто лишний шаг в этом процессе. Я бы предположил, что версия 1, хотя и не технически неверна, является плохой практикой. Даже при том, что полученное значение остается неизменным.