在php中,可以使用parse_url和http_build_url检测格式错误的url并防止xss攻击吗?有更好的吗?
我想允许我的网站的用户发布URL。然后,这些URL将在站点上的标签的href属性中呈现。基本上,用户A发布一个url,我的站点将其作为标签显示在页面上,然后用户B单击它以查看小猫的图片 我想防止javascript执行和xss攻击,并确保生成的输出中没有格式错误的URL 示例:用户A发布了一个格式错误的url,可能是小猫的图片。我的站点尝试从用户A的数据生成一个标记,然后用户B单击生成的链接。用户A实际上发布了一个格式错误的url,该url在中添加了一个javascript“onclick”事件,以将受害者的cookie发送到另一个站点 因此,我只希望允许格式正确的URL,并阻止http/https协议以外的任何内容。因为我不允许任何看起来不像url的东西,而且用户也不向我提供html,所以通过解析和重新构造url来检查应该非常简单 我的想法是,解析url应该会失败,并在错误的url上出现错误,或者用“\uURL”替换非法字符。我还可以检查url的各个部分是否有允许的协议。然后,通过使用http_build_url构建一个url,我将通过parse_url分隔的部分重新组合成一个已知格式正确的url。因此,通过这种方式首先分解它们,我可以在失败时给用户一条错误消息,而不是在我的页面中放置一个经过清理的被破坏的url 问题是,如果用户单击链接,这是否可以防止xss攻击作恶?解析和重建的url是否需要进一步转义?有更好的方法吗?到目前为止,标准php库中的函数不应该解决这个问题吗 我真的不想自己编写解析器,我甚至不考虑正则表达式。在php中,可以使用parse_url和http_build_url检测格式错误的url并防止xss攻击吗?有更好的吗?,php,url,xss,Php,Url,Xss,我想允许我的网站的用户发布URL。然后,这些URL将在站点上的标签的href属性中呈现。基本上,用户A发布一个url,我的站点将其作为标签显示在页面上,然后用户B单击它以查看小猫的图片 我想防止javascript执行和xss攻击,并确保生成的输出中没有格式错误的URL 示例:用户A发布了一个格式错误的url,可能是小猫的图片。我的站点尝试从用户A的数据生成一个标记,然后用户B单击生成的链接。用户A实际上发布了一个格式错误的url,该url在中添加了一个javascript“onclick”事件
谢谢 不,
parse_url
是不是意思是作为url验证程序
您可以为此使用:
filter_var($someURL, FILTER_VALIDATE_URL);
您需要做的只是在构建html时正确地转义内容。这意味着当一个值中有一个
“
时,您可以使用”构建html
防范XSS主要不是验证URL的有效性,而是正确转义。(尽管您可能希望确保它是http:
或https:
链接)
有关构建html字符串时要转义的内容(即:href属性)的更详细列表,请参见,根据其他一些事项,您可以通过检查URL是否指向任何内容来验证URL。以下是一个示例:
图1
<?php
// URL to test
// $url = "";
$content = file_get_contents($url);
if(!empty($content)){
echo "Success:<br /><iframe src=\"$url\" style=\"height:400px; width:400px; margin:0px auto;\"></iframe>";
}else{
echo "Failed: Nothing exists at this url.";
}
?>
Curl是另一个选项。使用Curl,您只需返回http头,然后检查它返回的错误代码。例如,错误404=未找到页面,200=确定,201=已创建,202=已接受,等等
祝你好运
~z~约翰
因此,在PHP中,您可以使用如下内容:
在生产网站上执行此操作,您很可能会得到$url,因为用户输入会造成严重的安全威胁,所以不要这样做。