SQL 语句安全问题.
发布网友
发布时间:2022-04-09 11:49
我来回答
共5个回答
懂视网
时间:2022-04-09 16:10
(2)sql执行出错后,不能把数据库中显示的出错信息,直接展示给用户。防止泄露服务器和数据库相关信息;
(3)防止sql注入,对特殊字符进行转义、过滤或者使用预编译的sql语句绑定变量。
sql语句应考虑哪些安全性?
标签:
热心网友
时间:2022-04-09 13:18
滤掉单引号,滤掉空格。一般没事,不过还是有注入的危险,另外最好过滤掉sql的常用关键字。
但是防御就是防御,没有100%的安全,高手还是有的,怎么都有可能注入。
热心网友
时间:2022-04-09 14:36
password允许有单引号嘛?
sql注入,都是出在程序构建的sql脚本
如果过滤了单引号,还是存在注入的
username= "admin --"
这样会把后边的内容注释掉。
如果能猜到某个用户名,不需密码就可登陆。
看看黑客防线03年前后的书刊吧,介绍的很详细,什么过滤空格、特殊字符,如果在浏览器地址直接注入,可用url编码注入。
热心网友
时间:2022-04-09 16:11
楼上那位回答的不正确。
Sql = "Select * From Admin Where UserName='" & UserName & "' And PassWord='" & Md6(PassWord) & "'"
这时候,如果用户名输入:admin' or '1'='1'"'
按照你代码逻辑用户就登录成功了。
因为sql被截断了,变成:"Select * From Admin Where UserName='admin' or '1'='1'" 了。
---------------------
不要粘贴错了,输入:admin' or '1'='1'"'
热心网友
时间:2022-04-09 18:02
当然有:
你把UserName作为一个变量,可以赋值。
设UserName = "' or '1'='1",代入原sql语句,就合成了
Sql = "Select * From Admin Where UserName='' or '1'='1' And PassWord='" & Md6(PassWord) & "'"
按照逻辑or 的运算规律,既然'1'='1'是恒成立的,所以不管用户输入密码是何值,sql语句条件始终成立,以上语句等同于"select * from admin"
因此,使用 "' or '1'='1" 作为登陆用户名,密码随意就可以获取到数据表最上层用户的权限了。
==============
最简单的解决办法,是过滤掉关键字符如"'"。