我使用javascript编码了一个html文本属性,并将其传递到我的数据库中。 我的意思是 像“Wales& PALS”这样的字符串的javascript
encodeURIComponent(e.value);
转换为“Wales%20PALS”
我想从asp.net将其转换回“Wales& PALS”。关于如何嵌入的任何想法
decodeURIComponent(datatablevalues)
在我的asp.net函数中返回所需的文本?
答案 0 :(得分:6)
作为SQL注入的预防,我们使用参数化查询或存储过程。编码并不适合这种情况。如果您希望您的用户向您的网站添加内容并且您希望阻止他们注入恶意javascript,则Html编码很不错。通过对字符串进行编码,浏览器将只打印出内容。您正在做的是对字符串进行编码,将其添加到数据库中,然后尝试将其解码回原始状态并将其显示给客户端。这样你很容易受到各种javascript注入的攻击..
如果那是你的意图,没问题,只要知道后果。每次做出这样的决定时都要知道“为什么”和“如何”。这有点危险。
例如,如果您希望允许用户添加html标记作为增强插入内容的方法,那么更安全的替代方法是创建自己的标记集(或使用现有的标记,如BBCode) ,因此输入永远不会包含任何html标记,当您将其插入数据库时,只需先解析它以切换到真正的html标记。 Asp.net引擎在请求期间永远不会允许恶意输入(除非您自愿强制它这样做)并且因为您已经控制解析输入,所以在输出时可以确保它是安全的,因此不需要进行一些额外的处理。
给你一个想法:)
如果你真的坚持按照你的方式去做(编码 - > db - >解码 - >输出),我们有一些选择如何做到这一点。我将向您展示一个例子:
例如,您可以创建一个新的get-only属性,它将返回您的解码数据。 (如果需要,您仍将保留原始编码数据)。像这样:
public string DecodedData
{
get
{
return HttpUtility.UrlDecode(originalData);
}
}
http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx
如果您正在尝试对html输入进行编码,那么使用不同的编码机制可能会更好。不确定javascripts encodeURIComponent
是否可以正确解析html。
答案 1 :(得分:0)
在HttpServerUtility中尝试UrlDecode。 API page for it