Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该采取什么预防措施来防止用户提交的HTML上出现XSS?_Javascript_Xss - Fatal编程技术网

Javascript 我应该采取什么预防措施来防止用户提交的HTML上出现XSS?

Javascript 我应该采取什么预防措施来防止用户提交的HTML上出现XSS?,javascript,xss,Javascript,Xss,我正在计划制作一个网络应用程序,允许用户在我的网站上发布整个网页。我正在考虑使用,但我不确定,因为HTML净化器编辑HTLM,重要的是HTML的维护方式是如何发布的。所以我想做一些正则表达式来去掉所有的脚本标记和所有的javascript属性,比如onload、onclick等等 不久前我看了一段谷歌视频,其中有一个解决方案。他们的解决方案是使用另一个网站发布javascript,使其无法访问原始网站。但我不想为此购买新域名。确保用户内容不包含任何可能导致Javascript在页面上运行的内容。

我正在计划制作一个网络应用程序,允许用户在我的网站上发布整个网页。我正在考虑使用,但我不确定,因为HTML净化器编辑HTLM,重要的是HTML的维护方式是如何发布的。所以我想做一些正则表达式来去掉所有的脚本标记和所有的javascript属性,比如onload、onclick等等


不久前我看了一段谷歌视频,其中有一个解决方案。他们的解决方案是使用另一个网站发布javascript,使其无法访问原始网站。但我不想为此购买新域名。

确保用户内容不包含任何可能导致Javascript在页面上运行的内容。

您可以通过使用一个HTML剥离函数来实现这一点,该函数去除了所有HTML标记(如PHP中的
strip_标记
),或者使用另一个类似的工具。实际上,除了XSS之外,还有很多原因要这样做。如果您有用户提交的内容,您需要确保它不会破坏网站布局

我相信您可以简单地使用当前域的一个子域来承载Javascript,并且您将获得与AJAX相同的安全优势。但不是饼干



在您的特定情况下,过滤掉
标记和Javascript操作可能是您的最佳选择。

对于此类事情,请小心使用自制正则表达式

类正则表达式

s/(<.*?)onClick=['"].*?['"](.*?>)/$1 $3/
s/(1)使用干净简单的基于目录的URI为用户提要数据提供服务。
确保在动态创建URI以解决用户上传的数据、服务帐户或域外的任何其他问题时,确保不要将信息作为参数发布到URI。这是一个非常容易的操作点,可以用来暴露服务器安全性中的缺陷,甚至可能将代码注入服务器

2)修补服务器。 确保您的服务器在该服务器上运行的所有服务的所有最新安全补丁上保持最新

3)针对SQL注入采取所有可能的服务器端保护措施。 如果有人可以将代码注入到您的SQL数据库中,该代码可以从您的盒子上的服务执行,那么该人将拥有您的盒子。在这一点上,他们可以安装恶意软件到您的Web服务器上,以反馈给您的用户,或者简单地记录来自服务器的数据并将其发送给恶意方

4)强制所有新上载到受保护的沙盒区域,以测试脚本执行。 无论您如何尝试从提交的代码中删除脚本标记,都有一种方法可以绕过保护措施来执行脚本。浏览器很邋遢,做了各种他们不该做的蠢事。在发布供公众使用之前,请在安全区域测试您的提交内容

5)检查提交代码中的信标。
这一步需要上一步,而且可能非常复杂,因为它可能发生在需要浏览器插件才能执行的脚本代码中,例如操作脚本,但它的漏洞与允许从用户提交的代码中执行JavaScript的漏洞一样多。如果用户可以向第三方提交可以发出信号的代码,那么您的用户,可能还有您的服务器,将完全暴露于恶意第三方的数据丢失。

人们在执行此操作时所犯的最严重错误是验证输入内容

相反,您应该在显示时进行验证

在确定什么是XSS和什么不是XSS时,上下文很重要。因此,您可以愉快地接受任何输入,只要在显示时通过适当的清理功能即可

考虑一下,当输入放在
'a href=“HERE”>
中时,构成“XSS”的内容将不同于此处的


因此,你需要做的就是确保你写用户数据的任何时候,你都非常仔细地考虑你在哪里显示它,并且确保它不能逃脱你正在写的上下文。

< P>如果你能找到让用户发布内容的其他方式,那就不涉及HTML了。有很多用户侧灯标记系统可用于生成HTML

所以我想做一些正则表达式来去掉所有的脚本标记和所有的javascript属性,比如onload、onclick等等

算了吧。您不能以任何有用的方式使用正则表达式处理HTML。更不用说涉及到安全性,攻击者可能会故意向您抛出格式错误的标记

如果您能说服用户输入XHTML,那么解析就容易多了。使用正则表达式仍然无法做到这一点,但可以将其放入一个简单的XML解析器中,遍历生成的节点树,检查每个元素和属性是否已知安全,并删除任何未知的元素和属性,然后重新序列化

HTML净化器编辑HTLM,重要的是HTML的维护方式与发布方式相同

为什么?

如果是这样的话,他们就可以以原始的形式编辑它,那么答案就是在浏览器中显示出来的过程中对它进行净化,而不是在提交时输入的过程中


如果必须让用户输入自己的自由格式HTML — 总的来说,我建议不要这样做 — 然后HTML净化器,采用白名单方法(禁止所有不安全的元素/属性)就可以了。这是非常复杂的,当发现黑客时,你可能必须保持它的最新状态,但这比你要用正则表达式攻击自己的任何东西都要超前

但我不想仅仅为了这个而购买一个新域名

您可以使用子域,只要任何身份验证令牌(特别是cookie)不能在子域之间交叉。(默认情况下,对于Cookie,它们不能这样做,因为域参数仅设置为当前主机名。)

您相信您的用户具有脚本功能吗?如果没有
<a onClick<a onClick="malicious()">="malicious()">
<a onClick ="malicious()">