使用参数化查询防止SQL注入漏洞
来源:互联网 发布:python 转换为unicode 编辑:程序博客网 时间:2024/05/23 22:18
首先,什么是SQL注入呢?
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通常的解决方案有过滤敏感字符,比如说过滤掉or, and , select sql等关键字,通过参数化查询解决sql注入漏洞的实例。
以往在Web应用程序访问数据库时一般是采取拼接字符串的形式,比如登录的时候就是根据用户名和密码去查询:
string sql = "SELECT TOP 1 * FROM [User] WHERE UserName = ‘” + userName + “‘ AND Password = ‘” + password + “‘”;
其中userName和password两个变量的值是由用户输入的。在userNamepassword都合法的情况下,这自然没有问题,但是 用户输入是不可信的,一些恶意用户只要用一些技巧,就可以绕过用户名、密码登录。
假设password的值是”1′ or ‘1′ = ‘1“,userName的值随便取,比如是”abc”,那变量sql的 值就是:
"SELECT TOP 1 * FROM [User] WHERE UserName = ‘abc’ AND Password = ‘1′ or ‘1′ = ‘1′”
由于’1′ = ‘1′恒为真,因此只要User表中有数据,不管UserName、Password的值是否匹配,这条SQL命令准能查出记录来。
防止这种漏洞的方式:
字符串检测:限定内容只能由英文、数字等常规字符,如果检查到用户输入有特殊字符,直接拒绝。但缺点是,系统 中不可避免地会有些内容包含特殊字符,这时候总不能拒绝入库。
字符串替换:把危险字符替换成其他字符,缺点是危险字符可能有很多,一一枚举替换相当麻烦,也可能有漏网之鱼。
存储过程:把参数传到存储过程进行处理,但并不是所有数据库都支持存储过程。如果存储过程中执行的命令也是通 过拼接字符串出来的,还是会有漏洞。
参数化查询(Parameterized Query 或 Parameterized Statement)是访问数据库时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值。
阅读全文
1 0
- 使用参数化查询防止SQL注入漏洞
- 使用参数化查询防止SQL注入漏洞
- 使用参数化查询防止SQL注入漏洞
- 使用参数化查询防止SQL注入漏洞
- 使用参数化查询防止SQL注入漏洞
- SQL注入漏洞与参数化查询
- 参数化查询---解决sql漏洞注入
- 参数化SQL语句,防止SQL注入漏洞攻击
- 参数化查询----防止SQL注入
- 防止sql注入的参数化查询
- [牛腩]参数化查询防止SQL注入
- C#的SQL参数化查询 防止SQL注入
- 为什么参数化SQL查询可以防止SQL注入?
- ADO.NET防止SQL注入漏洞攻击,两种参数查询
- 防止SQL注入漏洞
- 参数化查询为什么能够防止SQL注入
- 参数化查询为什么能够防止SQL注入
- 参数化查询为什么能够防止SQL注入
- iOS 重力感应之箭头指向重力方向
- 字符设备驱动--LED驱动程序
- Git的基本知识
- Java中的equals和==的区别
- laravel dd报错
- 使用参数化查询防止SQL注入漏洞
- cookie---session解析
- Volatile关键字解读(四)
- 使用Labview加载并解析XML文件(字符串的形式)
- STS将控制台输出信息保存为文件
- jQuery
- ESP8266 arduino下载程序不执行的若干bug
- js 中的事件
- 在Windows server 2008上安装Windows Mobile设备中心