如果插入恶意代码的唯一方法是在您的网页上逐字输入,那么攻击向量将是“self xss”,这是另一个答案中提到的,这是一种您无法真正阻止的社会工程攻击。
但是如果恶意代码也可以通过其他方式加载到您的页面上,那么您的问题就更大了。例如,如果您的网站容易受到反射型 XSS 或 CSRF 的攻击,攻击者可以使用它们来使用户加载恶意代码。
反射型 XSS 示例:如果页面上打印了 data 参数而没有对其进行清理,攻击者可以让受害者浏览到以下 URL 以使其加载恶意代码。
https://www.example.com/search?data=<script src="..."></script>
CSRF 示例:如果提交的数据随后打印在页面上而不对其进行清理,并且也没有针对 CSRF 的保护,则攻击者可以使受害者发布恶意数据。
<form method="post" action="submit">
<input type="text" name="title">
<input type="text" name="note">
<input type="submit" value="submit">
<!-- NO TOKEN TO PREVENT CSRF HERE!!! -->
</form>
如您所见,问题不仅在于“谁可以看到数据”,还在于“谁可以输入数据”。但是,即使您确定上述示例不适用于您的情况,为什么还要尝试避免 XSS 并始终尝试清理数据?因为消毒应该成为一种习惯,即使在某些情况下它可能看起来并不真正有用。如果清理不是一种习惯,迟早你会忘记清理最终导致 XSS 的东西。