2010-07-15 2 views
2

Вот моя функция:PHP filter_var для URL против XSS атак

function is_url($url) { 
    return (preg_match('#^(https?):\/\/#i', $url) && (filter_var($url, FILTER_VALIDATE_URL) !== FALSE)); 
} 

А вот хороший URL, что он проверяет, как верно:

http://blah.com"onclick="alert(document.cookie) 

Представьте себе, если это входит в <a href="<?php echo $url; ?>">

Есть ли лучшие валидаторы URL с регулярным выражением? Или URL-адрес, который я тестирую, с действительно действующим URL (в этом случае мне нужна функция очистки XSS)?

ответ

2

Там эта встроенная filter:

filter_var($url, FILTER_VALIDATE_URL); 

Это возвратит false с примера URL. Если бы это было действительно, оно вернуло бы $url. Пример:

 
[email protected]:~$ php -r "var_dump(filter_var('http://blah.com\"onclick=\"alert(document.cookie)', FILTER_VALIDATE_URL));" 
bool(false) 

В любом случае, решение для предотвращения XSS заключается в использовании htmlspecialchars. Так как это атрибут, вы должны использовать ENT_QUOTES:

htmlspecialchars($data, ENT_QUOTES); 

Но вы должны также проверить URL, поскольку в противном случае пользователь может включать в себя javascript: -как «URL».

+0

читать мой код: -/ – fire

+0

Ах, извините, линия была слишком длинной, и я не читал эту часть. Но в любом случае он возвращает false. – Artefacto

+0

Странно, что происходит, когда вы запускаете http://pastebin.com/9Yvg7Gqn для меня его демпинг как bool (true) ?? – fire

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