【问题标题】:How to protect against Encoded URL XSS Attack如何防范编码 URL XSS 攻击
【发布时间】:2020-03-08 11:05:16
【问题描述】:

我有以下两个问题:

1)如何防范此类XSS攻击?

https://www.example.com/index.php?&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041

如果假设由于某种原因,查询参数嵌入到图像加载事件中,那么它会是这样的

<img src=x onload="&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041">

//And browser treats as
<img src=x onload="javascript:alert('XSS')">

我已经在使用 PHP 的 htmlspecialchars()Filtar_var() 和 URL Sanitization,但是这种编码的 XSS 很容易通过这些函数

我们如何防御这种 Encoded XSS 或中和任何此类攻击?

2) XSS 攻击是否需要嵌入到 HTML 页面、Javascript 或 CSS 等中才能被触发?或者有一种不需要嵌入 XSS 的方法?

【问题讨论】:

  • 请说明拒绝投票的原因,以便我纠正我的问题。我已经尽力了我的水平,只问这个是因为我向专家寻求一些专业知识。谢谢。如果这是一个重复的问题,请指出我,因为我找不到。
  • XSS 攻击防范既简单又困难。这很容易,因为您不需要过滤各种东西 - 只需避免直接使用不受信任的数据。为了防止它,也很难识别不受信任的数据是什么。在您的示例中,您有一个包含为 URL 的脚本标记。如果您从不获取 URL、对其进行解码并将其插入 HTML 原始文件中,那么您将不会触发攻击。
  • @VLAZ 感谢您的回复。上面的编码 URL 是我的用户的输入,他试图 XSS 攻击我的网站。我的规则无法检测到它并绕过它。我想知道我应该怎么做才能减轻这种 XSS 攻击。我想允许我的用户在 cmets 中提供任何链接。因为这是用户对评论页面的输入

标签: javascript php html security xss


【解决方案1】:

当您将用户输入插入 HTML 文档时,htmlspecialchars 可以很好地防御 XSS。

它会阻止用户输入中的任何 HTML 语法脱离您打算去的地方并被视为 JavaScript。

您的问题与攻击已编码这一事实无关。问题是正在将用户输入放在预期 JavaScript 的位置(和 onload 属性),因此它已经被视为 JavaScript

json_encode 是这里的通常 解决方案(然后 htmlspecialchars 因为 JavaScript 在 HTML 属性中)。

但是,这仅在您接受用户输入并将其放入脚本以用作数据时才有效。在这里,您似乎正在接受用户输入并将整个事情视为一个 JavaScript 函数。

如果您这样做,那么您将容易受到 XSS 的攻击。您可以通过实施针对 CSRF 的防御措施在一定程度上缓解这种情况,但您几乎可以肯定一开始就不应该这样做。

【讨论】:

  • 感谢昆汀理解我的担忧。所以,你的意思是说只要我正确使用 htmlspecialchars 并且不将用户输入放在任何 javascript 的事件处理程序中,我就可以了?
  • 还有一些默认不安全的地方(比如一些接受URL的属性),你总是可以通过使用JS读取属性值然后以某些方式处理它来使自己容易受到攻击( eval 是一个明显的例子)。
  • 好的,所以我唯一的最后一个问题是,如果每个用户输入都通过 htmlspecialchars 传递,并且只放置在

    标记内,而不是放在其他任何地方,如属性或由某些 javascript @ 调用987654328@函数,那我就没事了?对吗?
  • 我试着做作业,你可以在 stackoverflow.com/questions/60578652/… 看到,但只有这个编码问题困扰着我
  • 没有可以通过这种方式实施的技术攻击。可能会注入一条用简单英语编写的消息,这会诱使用户做一些有害的事情。
猜你喜欢
相关资源
最近更新 更多
热门标签