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变量出现在
转义规则:
字符 | 转义 | 漏洞实例 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
' | \' | { | ||||||||||||
" | \" | { | ||||||||||||
\ | \\ | { 报错:unterminated string literal | ||||||||||||
/ | \/ | { 转义规则:
|