![Web漏洞分析与防范实战:卷1](https://wfqqreader-1252317822.image.myqcloud.com/cover/526/53252526/b_53252526.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.1.1 前端防御的开始
页面存在XSS漏洞的原因通常是用户输入的数据在输出时没有经过有效的过滤,示例代码如下:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/14_01.jpg?sign=1739566916-9nqjBVe6psFyJz7j8bgdAplKDhDgXm8A-0-e053132b8ebad531d3b1ee9c4991ce30)
在这种没有任何过滤的页面上,攻击者可以通过各种方式构造XSS漏洞利用,例如:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/14_02.jpg?sign=1739566916-UjyIJWt0hBCbPhJBoYsVR7u2mGPyh9Ye-0-f2a7e09e2da1c3acd941938512f5cb61)
通常情况下,我们会使用htmlspecialchars函数来过滤输入。这个函数会处理以下5种符号:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/15_01.jpg?sign=1739566916-I9OkbaYDyj1Awv30cUMzUTOAeSitQTBA-0-2221ae92faf4c41bcfcdaee6c3243c92)
一般情况下,对于上述页面,这样的过滤机制可能已经足够有效。然而,我们必须认识到,漏洞场景往往比想象中复杂,示例如下:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/15_02.jpg?sign=1739566916-V3yQGe2WYjYZhVm8h6e0DkeNqktybrV7-0-e8034d5d821e8bbf65798331c442ee1e)
对于这样的场景来说,上述过滤方法已不再适用,尤其是在输入点位于script标签内时。因此,我们通常需要采用更多样化的过滤手段来应对这类潜在的XSS攻击点。
首先,我们需要考虑符号的过滤。为了应对各种情况,我们可能需要过滤以下符号:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/15_03.jpg?sign=1739566916-2IN79D80JU1jeClpZ1NGeQgxkCSNRJEm-0-a822441a75b17199b733bffe95e91188)
但事实上,过度过滤符号会严重影响用户的正常输入,因此这种过滤方法并不常见。大多数人会选择使用htmlspecialchars结合黑名单的过滤方法,例如:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/15_04.jpg?sign=1739566916-6d7DfaMRu6iF5eFMDeGpLw5hqyV76fKj-0-8666ae43aff4b18aa9288b856367cc62)
有没有一种更底层的浏览器层面的防御方式呢?
CSP就这样诞生了。