. List item
SQL注入Problem
Problem问答
文章目录
- SQL注入Problem
- 问题记录
-
- P-1 假设数据库只存储password和eid列的sha256值。下面的SQL语句被发送到数据库,其中 p a s s w d 的 值 passwd的值 passwd的值eid变量由用户提供。这个程序有SQL注入吗?
- P-2 这个问题类似于P-1。除了不计算散列值,在SQL语句内部,它在PHP代码中使用PHP的hash()函数进行计算。这个修改过的程序有SQL注入问题吗?
- P-3 如果SQL语句是按以下方式构造的(在WHERE子句),仍然可以发起有效的SQL注入攻击吗?
- P-4 下面的SQL语句被发送到数据库,以向数据库添加一个新用户,其中\$name和\$passwd变量的内容由用户提供,但是EID和Salary字段由系统设置。一个恶意的员工如何设置他/她年薪高于80000?
- P-5 将以下SQL语句发送到数据库以修改用户名和密码,其中提供了\$eid、\$name、\$oldpwd和\$newpwd变量的内容由用户执行。您希望将老板Bob的薪水设置为1美元(使用salary字段),而把他的密码设置成你知道的,这样你以后就可以登录他的帐户了。
- P-6 下面的SQL语句被发送到数据库, e i d 和 eid和 eid和passwd包含用户提供的数据。攻击者希望尝试使数据库运行任意SQL语句。攻击者应该在\$eid或\$passwd中放入什么来实现这一点目标。假设数据库允许执行多个语句。
- P-7 MySQL允许我们将两条SQL语句放在一起,用分号分隔。我们是否可以使用SQL注入漏洞让受害服务器运行任意SQL语句?
- P-8 为了抵御SQL注入攻击,web应用程序在客户端:基本上,在用户输入数据的页面上,实现了一个过滤器使用JavaScript。它删除数据中的任何特殊字符,例如撇号,用于注释的字符,以及为SQL语句保留的关键字。假设过滤逻辑完成了这项工作,可以从数据中删除所有代码;这个解决方案可以杜绝SQL注入攻击吗?
- P-9 下面的PHP代码安全吗?
- P-10 请使用prepared函数修改以下程序。
- P-11 SQL注入允许远程用户在数据库上执行代码。在平常的设置中数据库只能被web应用服务器访问,而不能被远程用户访问没有直接路径供用户与数据库交互。用户如何将代码注入数据库?
- P-12 为了在C程序需要调用外部程序时抵御代码注入攻击,我们不应该使用system(),相反,我们应该使用execve()。请描述一下此对策与prepared语句之间的相似性,prepared语句是针对SQL注入攻击的对策
问题记录
P-1 假设数据库只存储password和eid列的sha256值。下面的SQL语句被发送到数据库,其中 p a s s w d 的 值 passwd的值 passwd的值eid变量由用户提供。这个程序有SQL注入吗?
$sql = "SELECT * FROM employee WHERE eid='SHA2($eid, 256)' and password='SHA2($passwd, 256)";
答:答:存在注入,参数是拼接的,可合并前后语句,参数eid如:
1,256)'and 1=1 #
passwd同理
P-2 这个问题类似于P-1。除了不计算散列值,在SQL语句内部,它在PHP代码中使用PHP的hash()函数进行计算。这个修改过的程序有SQL注入问题吗?
$hashed_eid = hash('sha256', $eid);
$hashed_passwd = hash('sha256', $passwd);
$sql = "SELECT * FROM employee WHERE id= ' $ hashhed_eid ' and password= '$ hashhed_passwd'";
答:不存在sql注入,参数已被hash处理,传入的恶意字符在最后无法拼接前后语句。
P-3 如果SQL语句是按以下方式构造的(在WHERE子句),仍然可以发起有效的SQL注入攻击吗?