实验8:Sql注入实验
`use`命令用于切换到希望操作的数据库,使用show tables命令可以查看数据库下有哪些表,发现credential表
# ' andPassword='$hashed_pwd'(被注释了)
- Task 2.3
MySQL的query函数只允许一条语句执行,如果要同时执行多条语句需要使用multi_query函数,对配置文件进行修改,重启后生效
admin';update credential set salary=8900 where Name="Boby";#
第一栏中填入Haoyichen',salary='114' where Name='Alice';#,相当于只进行了更新nickname和salary的部分
我们只需要把上面的sql语句中的username从Alice改成Boby即可,即: pig',salary='1' where Name='Boby';#
观察后端代码发现,密码不是明文存储的,这里采用的哈希算法是sha-1算法,我们选择一个新密码"nopassword",得到sha-1加密的结果
pig',password=' d186e8dac48a24d0115b568d0ab2c9e8b82e6adb' where Name='Boby';#
- Task4
prepared statement出现在编译之后,执行步骤之前,编译后的语句只包含空的数据占位符(placeholder),而不包含实际的语句,将实际的数据直接插入占位符中即可明确代码和数据的边界
实际数据被问号(?)所取代,使用bind_param()函数将数据填入占位符中,其中"is"表示参数的类型:"i"表示$id中是整数类型,"s"表示$pwd是字符串类型
后端将前端提交的查询参数拼接到代码的 SQL 语句模板中进行查询,当攻击者提交带有非预期 sql 查询片段时,导致数据库被意外查询。
2. 条件满足的情况下(能够通过数据库执行命令),导致服务器被接管
1.使用参数化查询:使用参数化查询可以将用户输入的数据作为参数传递给 SQL 语句,从而避免了恶意 SQL 注入的风险。
2.输入验证:对用户输入的数据进行验证,确保其符合预期的格式和类型。
3.转义字符:将特殊字符进行转义,从而避免其被误解为 SQL 语句的一部分。
4.最小化权限:将数据库用户的权限限制到最小,只授予其必要的权限。
5.使用 ORM 框架:使用 ORM 框架可以将数据库操作抽象出来,从而避免手动编写 SQL语句的风险
标签:语句,攻防,web,数据库,查询,SQL,注入 From: https://www.cnblogs.com/leo1017/p/17933195.html