1、页面标签必须关闭,属性值必须加引号。
在页面中使用的标签不关闭,属性值不加引号往往成为被攻击点,攻击者很容易的利用这些漏洞进行注入。避免这些漏洞的出现可以提高被攻击的可能。
2、Form提交方式必须选用POST。
Form默认的提交方式是Get,这种方式将表单中数据的按照variable=value的形式,使用“?”添加至Action所指向的URL后面,各个变量之间使用“&”连接。所要传递的信息量除受URL长度限制之外,信息内容都显示暴露。
在使用Form的时候必须将提交方式置为POST。示例:
<form action="…" method="post" target="_blank">…</form>
3、所有的非ASCII字符在URL中传递时都需要按照协商好的编码方式做URL编码。
推荐使用encodeURI、encodeURIComponent或者自定义encode实现。encodeURI、encodeURIComponent默认都返回UTF8编码的URL,区别在于encodeURI方法不会对下列字符进行编码: ":"、"/"、";" 和 "?"。而encodeURIComponent则会对这些字符进行编码处理。
4、尽量使用对象的innerText,不要使用innerHtml属性。
对象的innerText属性默认会对输入的数据进行encode,使得如果数据的数据还有html可执行标记时不会直接执行,而如果使用innerHtml属性的话不会保障。
<SPAN id=”Addr”></SPAN>
<Script>
// Using innerText renders the content safe.Addr.innerText=”…”;
//Using innerHtml requires the use of HtmlEncode to make it safe.Addr.innerHtml=””;
</Script>
5、输入框设置最大长度、输入数据类型限制。
输入框一般是攻击者比较钟意的攻击对象,攻击者可以通过输入框限制不足的弱点进行数据窃取(比如SQL注入)、或者制造迫害(如比XSS)。我们可以通过对输入框最大长度、输入数据类型的限制,从一定程度上防范这样的攻击。我们可以根据实际需求,对一些输入框限定只允许输入字母、数字等。同时对输入的数据长度做限制。
6、关闭客户端自动完成功能,减少驻留在客户端数据。
<FORM … AUTOCOMPLETE=”OFF”/>
<INPUT … AUTOCOMPLETE=”OFF”/>
7、设置<Frame>/<iFrame>受限,防止脚本执行。
将<Frame>/<iFrame>中security属性设置为restricted后, Frame中的脚本将不能执行(仅限于IE)。