URL Проверка

URL Проверка

Однажды я видел, казалось бы, достаточно хорошее решение с точки зрения безопасности.

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

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

Для проверки допустимости URL

используется примерно следующий запрос:

SELECT *

FROM Таблица

WHERE ValidURL=$url

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

Так что даже при использовании этого варианта защиты необходимо проверять переменную $surl которая должна содержать текущий URL  на недопустимые символы.

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

Задача проверки при использовании такого варианта защиты усложняется тем, что строки URL для PHP-сценариев могут содержать параметры, и в этом случае специальные символы ? и & будут присутствовать наверняка.

Первое, что приходит в голову,  перенести список URL из базы данных в файл.

Это решение еще хуже, потому что работа с файлами также далека от идеала и небезопасна.

Единственный случай, когда можно использовать подобную защиту и она будет действительно эффективной, — это простой сайт, где через URL передается только одна переменная id, которой присваивается числовое значение.

В только одна переменная id, которой присваивается числовое значение.

В этом случае переменную $url достаточно просто проверить по шаблону:

«//www.sitename.com/index.php?id=[0-9] {1,}»

Сначала переменная проверяется на соответствие этому шаблону, и если все нормально, то только после этого происходит проверка по базе данных.

Такой вариант защиты хорош

Такой вариант защиты хорош

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

Если параметры слишком сложные, то даже создать такую базу будет проблематично и бессмысленно, хотя бы из-за ее размера.

Понравилась статья? Поделиться с друзьями:
Блог Измайлова Павла
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности