对登录用户的XSS防护非常小
本文关键字:非常 XSS 登录 用户 | 更新日期: 2023-09-27 18:17:25
我不想安装任何第三方库,而且用户必须处于登录状态才能进入这个页面。这是否能够捕获用户在注释字段中输入的任何恶意代码?
if (comment.CommentText.Contains("<") ||
comment.CommentText.Contains(">") ||
comment.CommentText.Contains("script"))
return new EmptyResult();
不,这段代码不会捕获'用户可以在注释字段中输入的几乎任何恶意代码'。
这是完全错误的。如果用户想写例如'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中显示给用户的时候)。
& -> &
< -> <
> -> >
" -> "
' -> '