网络安全开发建议

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

什么是UI变量?凡是出现在HTML中由后端输出(或由JSON渲染)的变量都可称之为UI变量,它可以是PHP变量,Smarty变量,JSP变量或前端模版变量等等。

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

<>前数据:& lt; h2>“瑞奇”& lt;/h2>   模板:& lt;{$名称|逃脱:html |逃脱:javascript}祝辞   输出:,lt; h2& gt;和“Ricky&”, lt; \/h2& gt;   

胡子默认自动对HTML转义(双花括号是wiki的语法,所以本文胡子模版标签用{& lt;祝辞}表示):

<>前数据:& lt; h2> Ricky   模板:{& lt; name>}   输出:,lt; h2& gt; Ricky&肝移植;\/h2& gt;   

如果不想转义,可以使用3个花括号:{“名字”}

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

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

实例:

 & lt; div> {& lt; content>} & lt;/div>
  & lt;输入类型=案囱】颉眝alue=' https://www.yisu.com/zixun/{}/比;
  & lt;输入类型="文本" value=" https://www.yisu.com/zixun/{} "/比;
  

转义规则:

字符转义漏洞实例& lt;,lt; {& lt; content>}=& lt; h2>我bigger比;和gt;”, # 39 {& lt; value1>}='/祝辞& lt; script>警报(0)& lt;/script>…”,“{& lt; value2>}="/祝辞& lt; script>警报(0)& lt;/script>…,,,
(可选)如果不转义,则用户可以输入不可见字符,如:,,
如果转义,则用户输入的某些字符不能正确显示,如:,复制;


实例:

 & lt; script>
  var邮件=' {& lt; email>} ';
  var name=" {& lt; name>}”;/* {& lt; sex>}不会使用*/& lt;/script>
  

转义规则:

字符转义漏洞实例“\”{& lt; email>}=';警报(0);…”\“{& lt; name>}=熬?0);…\ \ \ {& lt; name>}=\
报错:无端接的字符串文字/\/{& lt; name>}="; & lt;/script> & lt; script>警报(0);…
{& lt; sex>}=*/警报(0);…\ n \ n {& lt; email>}=a@a.com
b@b.com
报错:无端接的字符串文字\ r \ r

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


实例:

 & lt; script>
  $(" #提示”)。innerHTML="您好!”+“{& lt; username>}”;
  & lt;/script>
  

转义规则:

字符转义漏洞实例先进行HTML转义,再进行JavaScript转义& lt;,lt; {& lt; username>}=
"; & lt;/script> & lt; script> document.body。innerHTML=" & lt; h2> Ricky比;和gt,“\“\”\ \ \/\/\ n \ n \ \ r


实例:

 & lt;输入类型=鞍磁ァ奔壑?" https://www.yisu.com/zixun/提交”/比;
  

转义规则:

字符转义漏洞实例先进行JavaScript转义,再进行HTML转义’\,# 39;{& lt; data>}=') "/祝辞;& lt;输入名称=" " \,“\ \ \ \/(可选)\ n \ n \ r \ r<,,lt的在和gt;

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


实例:

 & lt; a href=" http://xuri.agent.sogou.com/{& lt; path>}”在进入旭日& lt;/a>
  

转义规则:

字符转义漏洞实例非字母,数字字符encodeURIComponent {& lt; path>}="祝辞& lt;/a>…


实例:

 & lt; script>
  var url=location.href;//var饼干=?
  $(" #秀”). html (encodeHTML (url));
  & lt;/script>
  

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

实例:

 & lt; script>
  document . write (' & lt;输入类型=耙亍眓ame=" url " value=" +位置。href +”/祝辞');
  & lt;/script>
  

正确写法:

 & lt;输入类型=耙亍眓ame=" url " value="/比;
  & lt; script>
  document.getElementsByName (url)。值=https://www.yisu.com/zixun/location.href;>  

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

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

网络安全开发建议