对登录用户的XSS防护非常小

本文关键字:非常 XSS 登录 用户 | 更新日期: 2023-09-27 18:17:25

我不想安装任何第三方库,而且用户必须处于登录状态才能进入这个页面。这是否能够捕获用户在注释字段中输入的任何恶意代码?

if (comment.CommentText.Contains("<") ||
      comment.CommentText.Contains(">") || 
      comment.CommentText.Contains("script"))
            return new EmptyResult();

对登录用户的XSS防护非常小

不,这段代码不会捕获'用户可以在注释字段中输入的几乎任何恶意代码'。

这是完全错误的。如果用户想写例如'3 <在他的评论中?你不接受吗?或者只是script字,它是完全安全的。>

更重要的是,脚本标签并不是进行XSS攻击的唯一方法。(如有兴趣,请点击此链接)

您应该允许注释中的每个字符,并在需要的时候为需要它的确切系统清理数据。例如,<script>标记(以及其中的JavaScript)对数据库来说并不危险。在数据库中插入数据时,还有其他字符对数据库是危险的,您需要转义它们,但是应该插入script标记,因为它是完全安全的。

只有在HTML页面中向用户显示数据时才会进行XSS防护。

好了,现在你知道什么时候逃避你的数据来防止XSS。替换脚本标记、替换html特殊字符(如&、<和>等)有不同的方法。

从问题的标签我可以看出你正在使用ASP。净MVC。ASP。. NET MVC视图引擎(称为Razor)转义的数据,你写在html页面默认情况下,你不需要照顾它,除非你使用@Html。原始的助手。如果你使用ASPX视图引擎,你应该使用<%: myVar %>来显示数据从你的变量转义。

如果你没有这些视图引擎,你可能应该做一些手动转义。但这取决于你在哪里使用数据(在html中,在属性中…).

如果您在html中插入数据,替换下面的两个字符就足够了(但请记住,仅在XSS attack可能发生的地方转义危险的XSS字符)。不是当你从用户接收输入,不是当插入数据在数据库..而是在HTML中显示给用户的时候)。

& -> &amp;
< -> &lt;
> -> &gt;
" -> &#034;
' -> &#039;