我该如何向非技术人解释SQL注入
发布网友
发布时间:2022-04-29 16:40
我来回答
共3个回答
懂视网
时间:2022-04-29 21:01
(资料图)
假设你是一个在装满箱子的仓库里工作的机器人。你的工作是从仓库里的某个角落找到某个箱子,然后放到传送带上。机器人需要有人告诉它去搬运哪个箱子,所以给你编程的程序员给了你很多纸,纸上的表单已经预先写好了指令的集合,等用户填好之后再交给你执行。
这些表单看起来是这个样子的:阅读全文
更多 java,java学习,java面试题 http://techfoxbbs.com
【我该如何向非技术人解释SQL注入?】
标签:
热心网友
时间:2022-04-29 18:09
(1)对于动态构造SQL查询的场合,可以使用下面的技术:
第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,“SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'”显然会得到与“SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'”不同的结果。
第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如“SELECT * from Users WHERE login = 'mas' -- AND password =''”之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。
第三:对于用来执行查询的数据库帐户,*其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。
⑵ 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以*到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。
热心网友
时间:2022-04-29 19:27
给他个句子
“(用户输入的用户名)等于admin并且(用户输入的密码)等于sa123时,登录成功。”这个是程序的登录逻辑,括号里是用户输入的内容。也就是用户名输入admin,密码输入sa123时就会匹配上,然后登录成功。
现在有个机灵鬼,用户名写了“admin”,密码写了“1=1并且1不”,这样的话句子就变成了
“admin等于admin并且1=1并且1不等于sa123时,登录成功。”语义发生了改变并且逻辑通了,这样即使不输入正确的密码也登录成功了。
只是举个例子,简单来说就是通过输入一些改变语义的东西来使程序本身逻辑发生变化。