我希望每个人都可以输入一个网址或域名到数据库,但我想过滤那个域或网址的路径是真的无法破解自己,所以我的代码是否正确?
<?php
$url = $_GET['url'];
if (!filter_var($url, FILTER_VALIDATE_URL)) {
echo '*error*';
exit;
}
?>
This is I want [Y]: http://google.com
This is I want [Y]: http://google.com/index.php
This is I want [Y]: https://google.com
This is I want [Y]: https://google.com/index.php
This is I don't want [N]: google.com
This is I don't want [N]: google.com/index.php
谢谢大家。
答案 0 :(得分:0)
它会起作用但不是一个好主意:
http://www.d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea/
要点: 此功能存在安全问题,如XSS(跨站点脚本)攻击,这可能会伤害访问您网站的人(包括您自己)。它接受脚本警报(123);
等网址这是一个来自网站的解决方法,不是完美的,但比普通的filter_var更好:
function validate_url($url)
{
$url = trim($url);
return ((strpos($url, "http://") === 0 || strpos($url, "https://") === 0) &&
filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED | FILTER_FLAG_HOST_REQUIRED) !== false);
}