现在有一条SQL是这样的:
SELECT * FROM member
WHERE username
= params LIMIT 1
params是一个用户输入的变量,假设我已知所有库表字段,且只能执行一条SQL语句的情况下(项目的ORM执行的),params的值怎么填,会变成对数据库/数据表/表数据 有害的一条SQL
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
SELECT * FROM member WHERE username = "params" LIMIT 1
params = '" or (delete * from member) or username="';
拼合就变成了
SELECT * FROM member WHERE username = "" or (delete * from member) or username="" LIMIT 1
但是这是理论情况,实际上大部分框架都内置了一些处理,不是那么容易注入的,比如变量中的双引号自动做转义,这样就变成
SELECT * FROM member WHERE username = "\" or (delete * from member) or username=\"" LIMIT 1
,然后无害了。简单来说,不要自己去拼SQL,而是利用对象提供的方法去处理就好了。php不是一般都
$query->from('member')->where('username', params)->fetch()
这样吗。