PHP

Как предотвратить ввод пользователем невалидных ссылок?

Не сайте есть форма, в которой пользователь может оставлять комментарии в формате HTML, в том числе, пользователь в своём комментарии может отправить на сервер ссылки и объекты с атрибутами href и src. Но проблема в том, что он в эти атрибуты может вписать всё, что угодно, и если ссылка будет содержать неразрешённые символы, страница с таким комментарием будет невалидной.
Varazdat Xalapyan
Varazdat Xalapyan
6
А в чём проблема? Пишешь серверный скрипт, который перед тем, как записать комментарий в базу, проверяет содержимое всех атрибутов href и src. И, заодно, вырезающий все теги <script> и <iframe>.

В простейшем случае проверяется просто формат ссылок, в более продвинутом можно даже попытаться загрузить контент по указанному адресу cURL'ом и проверить на вредоносность.

P.S. Разрешать вводить HTML в комментариях - плохая идея. Лучше уж BBCode, ограничивающие полёт креатива и не позволяющие писать вредоносный код.
АШ
Александр Шевченко
63 568
Лучший ответ
Varazdat Xalapyan Проблема в незнании алгоритма. Каким именно условиям должна соответствовать корректная ссылка?
Varazdat Xalapyan BB эту проблему не решают, так как всё равно href может быть введён любым.
Вы не сможете на 100% предотвратить это. Есть специальные инструменты, которые позволяют послать ЛЮБОЙ запрос, даже такой, на который вы не рассчитывали.
Эта форма в браузере у пользователя посылает введенные данные в какой-то обработчик. Вы в этом обработчике берете и каждое полученное откуда-то значение перепроверяете на соответствие вашим ожиданиям, даже если вы в исходной html-форме наворотили там проверок.
Имхо мое мнение, что все эти проверки на стороне пользователя в HTML-коде вообще не нужны, за исключением самых базовых, типа наличие необходимых значений.
Потому что вы в любом случае будете проверять то, что там пришло из "дикого" интернета.
Проверь ссылку регэкспом, а потом curl
используй BBCode или HTML Purifier
Геннадий Яхтин
Геннадий Яхтин
59 846
Регулярные выражения в руки. На js есть куча готовых решений. И да, комментарии в html - баян. Ты еще скажи что не сделал экранирование вводимых данных в поле комментариев, или наоборот, ждешь пока тебя похакают
SC
Serhan Can
11 860