跨站脚本预防删除<<>


2

我正在测试仅跳过<>符号的应用程序。被验证的用户输入始终插在html标签之间,如<b>,<span>,<div>等,并且永远不会作为属性传递给页面。是否有足够的保护措施,或者有办法绕过这种过滤器?

实施例:

<a href="http://www.site.com" style="color:white"> 
    UserInput 
</a> 

问候。

+2

不要去掉字符,编码它们。或者更好的是,让你的web框架自动编码它们。 13 8月. 132013-08-13 14:54:18

  0

我同意CodesInChaos ...对于开发成本,您可能会根据需要输出编码,而不是将输入消毒过程作为一种安全措施。未来当用户输入结束为JavaScript变量或<input>标记中的字段时会发生什么? 14 8月. 132013-08-14 15:26:17

  0

不知道我正确理解问题,但如果'$ UserInput = &lt;script&gt; alert(1); &lt;/script&gt'? 09 12月. 132013-12-09 18:59:53

5

这不足以保护

有很多方式的攻击者可以在将别人的浏览器标记解释的字节序列潜行。

就你而言,甚至可能只是使用ampersand encoding来通过<>字符。

如果不成功,double encoding可能会绕过你的过滤器,甚至overlong utf-8 sequences(但最后一个已经过时了,大多数软件堆栈都不适合它)。

这些只是几个例子,但有many more绕过像你这样的简单标记过滤器的方法。 This bit尤其是相关的。

  0

我尝试了所有这些方法,但没有人工作。此外,我意识到< and >不是只过滤实际的html标签。 13 8月. 132013-08-13 13:53:27

+1

@Nucklear如果你已经从你的过滤器中的OWASP页面抛出所有东西,那么你可能相当不错。但是,白名单仍然是首选方法。例如'msg.matches(“[\ w \ s] *”)' 13 8月. 132013-08-13 13:59:05


1

哦,从哪里开始?

如果有安全的一个宗旨是一而再,再而再次证明自己是那个黑名单失败。

发挥漫长的游戏 - 确保您的网络应用程序可以抵制今天投掷的有限数量的攻击,但互联网将能够用数千个更多的变量尝试成千上万的事物(新代码,不同的浏览器,不同的语言集等,等等)。

“正在验证的用户输入始终为” - 今天说。当你继续前进时会发生什么,另一个开发人员会继承该代码?他们是否理解并履行你对自己的承诺?如果你做输入验证和输出编码,你会给下一个家伙一个战斗机会。

来吧,带出 “" <脚本>”,会发生什么,当有人提出 “" < SCR <脚本> IPT > "”?


0

谁提供你在这里提供的URL中的HREF:

<a href="http://www.site.com" style="color:white"> 
    UserInput 
</a> 

如果href是正在从输入代码提取。那么这只是另一个没有足够过滤或逃避用户输入的情况。所有的用户输入都需要被认为是邪恶的。

举例来说,如果它是提供在你的榜样情况下锚标记网址的用户,这是完全可能的,这sXSS将在工作和负载上的每个鼠标:

URL: http://www.site.com" onmouseover="javascript:alert(1)" 

另外,您可以更改onmousover to onload,现在您的JavaScript可以在每个页面加载时执行。从HTML标签中禁用DOM事件是防止这种类型的sXSS攻击的另一种方法。