如何对抗注入漏洞
其实注入漏洞的本质是数据与代码混合在一起造成的.
我建议
(1)迅速开发出计算机自身专有的文字,该文字专门用于计算机执行命令,这样可以与用户的数据文字分开,用户输入的文字不会含有也不允许含有计算机程序内部专用的文字.即便是客户端想输入该文字(例如技术论坛就是专门交流代码的),可以使用表面一样,但是实际的文字编码不一样的字符,不过要是拷贝代码就麻烦了,估计需要IDE处理。现在的计算机编程代码用的文字仍然是人类语言文字,只是它们被赋予了计算机意义了,但是这样会和人类文字产生歧义,这就给注入漏洞空子.
(2)对于数据特别是查询数据要在程序中重新定义一个类型赋值,对于数据库sql语句得到的数据并且再次校验数据.即客户端得到的是程序赋予的数据,而不能直接从数据库中得到
(3)对于客户端提交的数据中确实有输入代码的必要的部分采用白名单策略处理它,反正客户端传递的数据是在程序允许的框架环境下输入的,那么我们可以在框架下规定好相应的歧义不大的代码加入白名单,这些代码限定了客户端代码的功能。这样服务器端对这些代码只接收其中白名单中有的(现在过滤大多数采用黑名单策略,这样黑名单不全会导致过滤不周全,白名单策略即便考虑不周全最多是功能不完善,但是安全),但是如果是复制的话,有可能被复制对象中有白名单中没有的代码但是效果差不多,我们就没有办法了.
(4)富文本编辑器等提供用户操作的,客户端记录用户操作,而不是操作结果,然后由服务器端根据这些操作决定结果。这种方法能够防止大量的XSS