2011-12-21 52 views
0

在我们网站的几个区域中实施了InfoPath表单来提交请求。一个示例是请求表单,用户可以向可以回复该消息的工作人员提问。如何防止InfoPath表单中的跨站点脚本

有人可能在某个InfoPath控件(主题或消息正文)中输入JavaScript并通过InfoPath表单提交数据。然后,JavaScript代码会在该页面获取警报消息的情况下触发。我研究了很多,但没有找到明确的答案。

是否有任何直接的方法来限制/防止这种类型的验证XSS?任何的意见都将会有帮助。

先谢谢了!

+1

你如何生成提供给员工的HTML? – 2011-12-21 16:21:09

+0

工作人员页面的编码与邮件页面完全一样......它是一个单独的页面,使用ASP.NET和C#在单独的解决方案中创建。数据通过服务器传递。 这只是我们使用它的一个示例,但在网站的各个部分都有InfoPath表单。我想我只是想知道如何处理与InfoPath表单一般的XSS。如果表单以纯文本形式提交数据,我认为这不会成为问题,但有些控件是Rich-Text,所以我担心有人可以通过它发送脚本。 – easyeman77 2011-12-21 17:10:06

回答

0

可以编码文本,例如,

var titleValue = '<'+'script type="text/javascript">alert(123);<'+'script>', 
      encodedValue = [], 
      c; 
     for (var i = 0;i < titleValue.length;i ++) { 
      c = titleValue.charAt(i); 
      if (c == '<') 
       encodedValue.push('&lt;'); 
      else if (c == '>') 
       encodedValue.push('&gt;'); 
      else if (c == '&') 
       encodedValue.push('&amp;'); 
      else if (c == '"') 
       encodedValue.push('&quot;'); 
      else 
       encodedValue.push(c); 
     } 
     alert('encoded value is: ' + encodedValue.join('')); 

问候,

0

如果通过JavaScript产生员工的HTML,那么你可以使用的innerText避免任何HTML标记解释:

document.getElementById('text').innerText = untrustedOutput; 

如果是服务器端,你可以看看benban123's回答并适应你的语言。在PHP中,我会使用:

htmlentities($text); 

(请参阅:http://www.php.net/manual/en/function.htmlentities.php)。 但我不确定它的有效性,XSS很多。

编辑:如果您的文本只是意味着通过javascript函数alert(msg)显示,我认为你是安全的,因为它不会被解释(也许除了换行字符/ n)。