Насколько безопасна перезапись URL? - PullRequest
1 голос
/ 06 марта 2012

Возможно, это дублирующий вопрос, но я не могу найти другой, если это так.

Я искал совет о том, насколько безопасна перезапись URL? Останавливает ли это SQL-инъекцию или XSS? Если нет, то как его обойти?

Причина, по которой я спрашиваю, заключается в том, что я не уверен в процессе, который происходит при переписывании. Прав ли я, полагая, что этот URL-адрес может быть опасным:

http://www.website.com/article/1' UNION ALL ...

Ответы [ 4 ]

3 голосов
/ 06 марта 2012

Перезапись URL не имеет ничего общего с предотвращением SQL-инъекций!Переписывание URL-адресов в основном используется для превращения «некрасивых» URL-адресов (например, http://domain.com/index.php?name=1&value=2) в красивые URL-адреса, например http://domain.com/1/2).

. Это вообще не предотвращает внедрение SQL-кода. Необходимо предотвратить SQL-инъекцию, убедившись в том, чточто пользовательские входные данные не содержат символов, которые изменяют оператор SQL так, чтобы он выполнял действия, которые не были предназначены. Пример:

У вас есть оператор SQL, например:

SELECT * FROM $tableName;

И $tableNameэто параметр, который вводится пользователем через веб-форму. Теперь пользователь может ввести Users; DROP TABLE Users; --. Это было бы плохо:

SELECT * FROM Users; DROP TABLE Users; --;

Это, однако, не может быть решено путем перезаписи URL.

1 голос
/ 06 марта 2012

Перезапись URL и безопасность - это две разные вещи. Перезапись URL-адреса просто изменяет представление переменных в URL-адресе, но не обеспечивает безопасность вообще. Мы должны защитить переменные в вашем коде после восстановления из URL.

1 голос
/ 06 марта 2012

нет, перезапись URL не может предотвратить XSS или SQL-инъекцию.

Если вы хотите избежать SQL-инъекции, используйте библиотеку DBI (с оператором prepare / execute) в вашем коде.

Если вы хотите избежать XSS-атаки, пожалуйста, отфильтруйте свой пользовательский ввод и в своем коде.

0 голосов
/ 18 апреля 2012

Но для SQL-инъекций, основанных только на переменной $ _GET, если мы используем это:

RewriteRule ^ ([a-z] ) - ([0-9] ). Html $ /index.php?page=$1&id=$2 [L]

Может ли переменная $ _GET ["id"] вводиться? Мы форсируем значение только целым числом.

...