Web安全开发建议

Web安全问题,很多时候会被人所忽略,安全漏洞造成了很多不必要的维护和开发任务,产生的问题有时候更是致命的。 实际上,只要我们养成一些习惯,知道一些安全问题的基本原理,可以很大程度避免问题的出现,这也是一个优秀Web程序员的必备素质。 

UI变量转义规范

有些模版自带了转义功能,比如Smarty可以对HTML或JavaScript转义:

Data: <h1>"Ricky"</h1> Template: <{$name|escape:html|escape:javascript}> Output: &lt;h1&gt;&quot;Ricky&quot;&lt;/h1&gt; 

Mustache默认自动对HTML转义(双花括号是wiki的语法,所以本文Mustache模版标签用{<>}表示):

Data: <h1>Ricky</h1> Template: {<name>} Output: &lt;h1&gt;Ricky&lt;/h1&gt; 

如果不想转义,可以使用3个花括号:{{{name}}}

注意:当没有使用具有转义功能的模版时,一定要在程序中对UI变量进行转义。对后端传来的数据,都采取不信任的策略。

根据UI变量出现的位置不同,转义规则也不同,常见的有以下几种情况:

实例:

<div>{<content>}</div> <input type='checkbox' value='{<value1>}' /> <input type="text" value="{<value2>}" /> 

转义规则:

 

实例:

<script> var email = '{<email>}'; var name = "{<name>}"; /*{<sex>} will not use */ </script> 

转义规则:

注意:注释也会存在漏洞,代码上线前要进行压缩,去掉注释。

 

实例:

<script> $("#tip").innerHTML = "您好!" + "{<username>}"; </script> 

转义规则:

 

实例:

<input type="button" value="提交" /> 

转义规则:

注意:实际开发中,应使用事件绑定,避免这种写法。

 

实例:

转义规则:

 

其他注意事项

实例:

 

<script> var url = location.href; //var cookie = document.cookie; $("#Show").html(encodeHTML(url)); </script> 

说明:从cookie或页面的url中获取的数据都是不可信任的,可能包含恶意代码。

实例:

<script> document.write('<input type="hidden" name="url" value="' + location.href + '" />'); </script> 

正确写法:

<input type="hidden" name="url" value="" /> <script> document.getElementsByName("url").value = location.href; </script> 

说明:直接向页面输出带有url的HTML,可能会执行含恶意代码。

说明:当域为a.sogou.com的A页面内嵌域为b.sogou.com的B页面时,可以通过设置domain为sogou.com使两个页面进行通信。但这样的设置使安全隐患得以扩大化,如果B页面存在XSS漏洞,那么就可以通过B页面操控正常的A页面。

说明:Json数据的Response要设置contentType为“text/javascript”,避免未设置或者设置成“text/html”。否则容易注入JavaScript脚本,并当着普通页面来运行。

做跨域通信通常会用到Flash,这需要在server部署一个crossdomain.xml文件,通常为:

<?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy> 

这表示允许任何域的Flash对本server进行访问,如果Flash是用户上传的,就可能包含恶意代码。

解决办法:只允许搜狗域的Flash访问

<?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*.sogou.com" /> </cross-domain-policy> 

如果展现来自用户上传的Flash,需要设置一下2个参数:

  • allowScriptAccess: “never” //绝对禁止Flash与页面元素及脚本的通讯

  • allowNetworking: “none” //禁止任何的网络通讯

不要使用iframe或者其他形式随意嵌套第三方页面,第三方页面会包含不可控的因素,譬如含有攻击浏览者的恶意代码。如果第三方页面存在漏洞,攻击者可以通过攻击第三方来实现攻击父页面。

  • 尽量使用POST提交

  • 添加refer的检查

  • form表单提交添加图形验证码

  • 添加token验证

 Web安全开发建议

原文链接:https://www.cnblogs.com/andashu/p/6378669.html

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/18083

(0)
上一篇 2023年12月23日 22:36
下一篇 2023年12月24日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml