xss防范的三点原则:

1. 避免用户输入的脚本再次展示于客户端之时非设计预期的执行
2. 任何时候不应该改变用户的输入
3. 何时展示何时解决

【解释一下】对于上述xss防范原则不是本人编造的,而是业界的共识(未必是我们伟大祖国的业界共识,但这确实是业界的共识),以下将分别以例证的方式说明以上三条XSS解决方案的基本原则。今天就来个倒序吧,一个一个看:

【上述原则之3】 比较容易理解,许多公司已经解决了XSS问题,但是解决的不完整,或者说不完美,有后患,以实例来看以下:
步骤:
1) 打开www.soso.com
2) 输入字符串:159753125521<script>alert(“‘”)</script>
3) 打开资源文件,如下图:

XSS防范解决方案系列:淘宝、百度、腾讯的解决方案-开水网络

图中的部分代码:

<script>var __kw = '159753125521%3A%3Cscript%3Ealert%28%22%27%22%29%3C%2Fscript%3E',__kw8 =encodeURIComponent("159753125521:<script>alert(\"'\")<\/script>")...

可以看出,代码片段中的编码(此处的编码是指:Encoding或者叫转义)从解决问题的原则角度来说,有点早,毕竟:变量__kw将在何时使用,何处使用,你可能在编码(此处的编码是指:写代码)的时候可以预料,但是随着时间的推移,可能会被其它的开发人员使用,使用的语法环境是否适合使用URL+Javascript编码(此处的编码是指:Encoding或者叫转义)就很难说了。

【上述原则之2】 我们提供的应用平台应该是这样的:
1.  允许用户输入任何值而不影响本应用的正常运行,也不改变输入的输入,至少不应该让用户感觉到你改变了用户的输入
2. 出于对应用设计的考虑,禁止用户输入特定的保留字符,对于此种情况,应用平台理应以友好的方式告知用户以提示用户不要输入不可以接受的字符,而不是直接改变用户的输入而用户觉得莫名其妙,比如淘宝网,打开淘宝首页,按以下步骤进行:
1)  打开www.taobao.com
2)  字符串:159753125521<script>alert(“‘”)</script>
3)  在淘宝的输入框里输入以上2)字符串(此类例子,我一般使用Google Chrome浏览,不同浏览器有可能在处理URL时有不同的方式),你也可以在Chrome里直接运行以下URL:

http://s.taobao.com/search?q=159753125521<script>alert("'")</script>

得到的结果是搜索框的搜索值变成了:159753125521 script alert( ) /script,截图如下:

XSS防范解决方案系列:淘宝、百度、腾讯的解决方案-开水网络

其资源文件里也同样如此,截图如下:

XSS防范解决方案系列:淘宝、百度、腾讯的解决方案-开水网络

以上表明,淘宝在xss防范问题时,因为方法不当而改变了用户的输入。

【上述原则之1】 意思也不难理解,这个问题比较敏感,如果我举出一个例子似乎就意味着这地方有漏洞,有没有办法举出一个例子却是一个几乎不能被利用的漏洞呢? 貌似有,步骤:
1) 打开www.baidu.com
2)输入字符串 <script>alert(“‘”)</script>//<!–159753159753
3)点击搜索,观察现象,细节我就不分析了,现象上看,貌似某处的被字符串 // 或者<!– 起了作用而导致后续代码被注释,我只是猜测啊,不负责的,仅供交流。
结果是这样的:

XSS防范解决方案系列:淘宝、百度、腾讯的解决方案-开水网络

正确的提示页应该是:

XSS防范解决方案系列:淘宝、百度、腾讯的解决方案-开水网络