2017-04-05 31 views
-1

想要使用php函数从url中删除所有不需要/非法的字符以避免XSS。我如何实现它?使用php函数从URL中删除所有标记

例子:

https://test.com/abcd/contactus.php/t54xd“>警报(1)rvdgz ID = 1

有效的URL是 - https://test.com/abcd/contactus.php

注:?要删除所有标签不只是特定的脚本标签也将内容应该被删除

试过filter_var,strip_tags函数但是没用,我想唯一的解决方法是使用preg_replace/preg_replace_all函数,任何人都可以请我提供th用正则表达式来实现期望的输出?

回答

0

(这应该是一些意见 - 但是发帖的,由于长度的答案/格式化考虑)

真的努力想象什么样的代码将很容易受到XSS攻击时所呈现的:

https://test.com/abcd/contactus.php/t54xd">alert(1)rvdgz?id=1 

要删除所有标签

但也有在你提供的例子中没有(html)标签(除非它们已经被编辑器在这里改变了)。

的金科玉律是:

  • 验证输入
  • 逃生输出

如果你不喜欢输入的外观,不接受它。不要试图将数据更改为可接受的数据(除非您完全知道您可以保留并恢复原始信息和转换的事实)。

始终确保数据表示符合它离开代码的位置。将数据写入Javascript,写入SQL语句,写入CSS,写入HTML,写入CSV文件....都需要不同的数据表示。

但是你似乎试图在这里应用非线性,不可逆变换来输入。

您的输入是not a valid URL,但奇怪的是,在我本地的PHP 5.3.3安装中,filter_var()不会抱怨它(在路径中不允许有>字符)。来自RFC 2396:

虽然它们在URI语法内不允许使用,但我们在这里包括那些已被排除的US-ASCII字符的描述以及它们排除的原因[...]。 “<”和“>”和双引号(“)字符被排除。

RFC详细描述了什么是有效的URL应该是什么样子。实现一个功能,应用此验证是微不足道的,但是,这不会阻止XSS攻击

如果您提供的网址是一个有效的攻击,那么任何解决问题的方法也会被定位在这里讨论,并通过修复代码中其他位置的错误可以更好地解决问题。

相关问题