预处理,将参数和查询分开。
那怎样才能做好参数化?如果你的查询不是复杂到非字符串构造sql不可(譬如递归或者动态层次的join),那几乎所有情况都可以使用下列方法解决:
1、SQLServer把数据跟stored procedure放在一起。其实这样还能起到数据和封装同步的作用,不需要两头改。在schema发生变化的时候,整个update都可以做transaction。
2、客户端(或者你的网站)只访问stored procedure。
3、只给你的客户端打开execute权限,这样它只能访问stored procedure。
使用stored procedure基本就等于让数据库来帮你做参数化,所以你不会犯任何错误。而且这个方法并不会在你需要字符串构造sql的时候发生问题,因为stored procedure里面也可以构造sql,而且做起这种sql构造的参数化也特别方便。
所有的注入问题都自动解决了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。