我想保护一些输入。
例如,一个免费的文本区域,用户可以在其中写一些句子
在服务器端,I HTML&javascript编码:
_htmlEncoder.Encode(_javascriptEncoder.Encode(input))
但我很难让用户感到无痛。例如,如果我输入以下法语文本:
这是一个对我很重要的短语。
编码后,我将得到:
C\u0026#xA0;这句话对我来说很重要。
对单引号进行编码。显然,我以前可以解码它,但这会使它容易受到XSS攻击。
我一定错过了什么显而易见的东西。我有什么选择?
如果编码过多,就会发生这种情况。
您需要使用精确地所需的编码量,不能多,也不能少。例如,如果您的输入没有在JavaScript中一字不差地使用,那么JavaScript对其进行编码就没有意义。没有makeMyStringSecure(...)
方法可以神奇地阻止XSS。您需要了解每个字符串在何处以及如何使用,并在特定情况下根据需要对其进行编码。
[评论中的后续问题:]所以在这种情况下,我在两个不同的地方使用输入:普通UI[和]在电子邮件中。这意味着我应该在使用它之前进行编码,而不是在数据库级别?(对于XSS,我的意思是,对于sql注入,我当然会(
没错!数据库应该包含原始的、未编码的值,您可以根据需要对其进行编码:如果您通过JSON发送,则进行JSON编码;如果您通过XML发送,则使用XML编码;网页的HTML编码;电子邮件的可打印报价,等等
理想情况下,编码是由(UI(库代码完成的,而不是由业务逻辑完成的。所有需要手动完成的操作都容易出错。同样,应该不需要对字符串进行SQL编码:使用参数化查询,库会处理它!