首页 新闻 会员 周边 捐助

如何在form提交时自动进行HTML Encode

0
悬赏园豆:50 [已解决问题] 解决于 2013-08-31 18:37

比如这样的HTML代码:

<div class="seachInput">
    <form method="get" action="so.aspx">
    <input type="text" class="txtSeach" id="w" name="w" />                        
    <input type="submit" class="btnSearch" value="找一下" />                        
    </form>
</div>

当用户在文本框中输入:<canvas>

提交时自动转换为:&lt;canvas&gt;

问题补充:

后来想到的一个方法是添加一个onsubmit事件处理函数:

function onSearchSubmit(id) {
    document.getElementById(id).value = Encoder.htmlEncode(document.getElementById(id).value);
}
dudu的主页 dudu | 高人七级 | 园豆:30778
提问于:2012-04-25 10:30
< >
分享
最佳答案
0

第一种方法:用ajax提交。

第二中方法:你在页面aspx文件头的Page中加入 ValidateRequest="false",亦或在Web.config文件<system.web>节点下面加入这样一句: <pages validateRequest="false"/>。(ValidateRequest的默认值是True)

第三种方法:在文本框上附加一个obblur事件,这个事件的主要作用是检查文本框的值,如果有"<",就进行escape下,然后提交。

第四种方法:在表单提交前,监控onSubmit方法,将数据进行escape

收获园豆:50
az235 | 大侠五级 |园豆:8483 | 2012-04-25 11:54

大哥你现在才发现啊,这就是我说的第四种方法

az235 | 园豆:8483 (大侠五级) | 2012-04-26 11:18
其他回答(4)
0

很奇怪你这个问题。

在提交的时候,FORM的SUBMIT行为会自动的进行处理,而且到了服务器端的时候,你只要简单的把这个值取出来(REQUEST.QUERYSTRING),值的内容就会是用户填写的原始内容的。

无之无 | 园豆:5095 (大侠五级) | 2012-04-25 10:35

尖括号会带来XSS威胁,从安全角度考虑,Web服务器不允许提交的数据中包含尖括号。

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2012-04-25 10:51
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
<form action="HTMLPage1.htm" method="get">
<input name="text" type="text" />
<input type=submit value="submit" />
</form>
</body>
</html>

这个代码,我输入<Canvas>后提交,在URL里显示成:

http://localhost:2565/HTMLPage1.htm?text=%3Ccanvas%3E

这个是由FORM提交行为自动进行编码的。

至于POST方式的提交的话,处理过程应该也是一样的。

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-04-25 11:07

@笨笨蜗牛: 

可是,IIS会先把 %3Ccanvas%3E 解码为 <Canvas>,然后进行检测,并提示:

A potentially dangerous Request.QueryString value was detected from the client (w="<canvas>").

针对IIS的这个问题,我专门写过一篇博客:

躲不过也要躲:让encodeURIComponent过的尖括号躲过ASP.NET的误拦截

 

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2012-04-25 11:38
0

保存时,先对数据进行HTML编码不就可以了

Server.HtmlEncode("<canvas>");

KivenRo | 园豆:1734 (小虾三级) | 2012-04-25 11:16

提交时就被IIS拦截了,根本到不了ASP.NET程序

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2012-04-25 11:40
0

对于已经意识到XSS的程序员而言:

1:应该允许用户的正常提交行为,包括提交<号,因为本来就是正常行为,不应该干扰用户的正常输入。

2:有能力发动xss的,绕过客户端验证是件很容易的事(修改html或直接发数据包),因此客户端防是不太实际的事情。

3:避免XSS的处理方法,原则上应该是在服务端处理,包括:

A:入库前的处理。

B:显示到页面时的处理。

C:针对xss最常见的cookie处理,特殊加密处理,让cookie在切换环境时即时失效。

路过秋天 | 园豆:4787 (老鸟四级) | 2012-04-25 21:55
0
李永京 | 园豆:3114 (老鸟四级) | 2012-04-26 23:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册