Web安全问题,很多时候会被人所忽略,安全漏洞造成了很多不必要的维护和开发任务,产生的问题有时候更是致命的。
实际上,只要我们养成一些习惯,知道一些安全问题的基本原理,可以很大程度避免问题的出现,这也是一个优秀Web程序员的必备素质。
UI变量转义规范
什么是UI变量?凡是出现在HTML中由后端输出(或由JSON渲染)的变量都可称之为UI变量,它可以是PHP变量、Smarty变量、JSP变量或前端模版变量等等。
创新互联主营乌什网站建设的网络公司,主营网站建设方案,App定制开发,乌什h5小程序定制开发搭建,乌什网站营销推广欢迎乌什等地区企业咨询
有些模版自带了转义功能,比如Smarty可以对HTML或JavaScript转义:
Data: "Ricky"
Template: <{$name|escape:html|escape:javascript}>
Output: <h2>"Ricky"<\/h2>
Mustache默认自动对HTML转义(双花括号是wiki的语法,所以本文Mustache模版标签用{<>}表示):
Data: Ricky
Template: {}
Output: <h2>Ricky<\/h2>
如果不想转义,可以使用3个花括号:{`name`}
注意:当没有使用具有转义功能的模版时,一定要在程序中对UI变量进行转义。对后端传来的数据,都采取不信任的策略。
根据UI变量出现的位置不同,转义规则也不同,常见的有以下几种情况:
UI变量出现在HTML标签中或标签的属性中
实例:
{}
转义规则:
字符 | 转义 | 漏洞实例 |
---|
< | < | {} = I am bigger |
> | > |
' | ' | {} = '/>… |
" | " | {} = "/>… |
& | & (可选) | 如果不转义,则用户可以输入不可见字符,如: 如果转义,则用户输入的某些字符不能正确显示,如:© |
UI变量出现在
转义规则:
字符 | 转义 | 漏洞实例 |
---|
' | \' | {} = ';alert(0);… |
" | \" | {} = ";alert(0);… |
\ | \\ | {} = \ 报错:unterminated string literal |
/ | \/ | {} = ";
转义规则: 字符 | 转义 | 漏洞实例 |
---|
先进行HTML转义,再进行JavaScript转义 | < | < | {} = ";
说明:从cookie或页面的url中获取的数据都是不可信任的,可能包含恶意代码。 避免document.write + location.href的写法实例:
正确写法:
说明:直接向页面输出带有url的HTML,可能会执行含恶意代码。 谨慎使用document.domain解决跨域问题说明:当域为a.sogou.com的A页面内嵌域为b.sogou.com的B页面时,可以通过设置domain为sogou.com使两个页面进行通信。但这样的设置使安全隐患得以扩大化,如果B页面存在XSS漏洞,那么就可以通过B页面操控正常的A页面。 Json数据conentType的设置说明:Json数据的Response要设置contentType为“text/javascript”,避免未设置或者设置成“text/html”。否则容易注入JavaScript脚本,并当着普通页面来运行。 Flash跨域crossdomain.xml配置做跨域通信通常会用到Flash,这需要在server部署一个crossdomain.xml文件,通常为:
这表示允许任何域的Flash对本server进行访问,如果Flash是用户上传的,就可能包含恶意代码。 解决办法:只允许搜狗域的Flash访问
在页面中插入Flash的安全设置如果展现来自用户上传的Flash,需要设置一下2个参数: 不要随意嵌套第三方页面不要使用iframe或者其他形式随意嵌套第三方页面,第三方页面会包含不可控的因素,譬如含有***浏览者的恶意代码。如果第三方页面存在漏洞,***者可以通过***第三方来实现***父页面。 防范CSRF(跨站点请求伪造)***尽量使用POST提交 添加refer的检查 form表单提交添加图形验证码 添加token验证
网页标题:Web安全开发建议
本文路径:http://www.cdkjz.cn/article/jcjsei.html
|
|