【PHP面试题】SQL语句应该考虑哪些安全性?

本文探讨了PHP面试中关于SQL安全的考点,包括使用预处理语句防止SQL注入,数据转义和错误信息处理。还强调了PDO和MySQLi相对于MySQL函数库的安全优势,它们支持预处理,有助于提升数据库操作的安全性。
摘要由CSDN通过智能技术生成

一、考点

1、SQL查询的安全方案

1)使用预处理语句防SQL注入
DELETE FROM `user` WHERE `id` = 1;

// SQL注入语句
DELETE FROM `user` WHERE `id`=1 or 1=1;

在这里插入图片描述

防止SQL注入:

DELETE FROM `user` WHERE `id`=?;

在这里插入图片描述


2)写入数据库的数据要进行特殊字符的转义

如:SQL语句中带 "",或者 ''的都需要进行转义,在应用层要进行处理,也是为了防止SQL语句的注入。


3)查询错误信息不要返回给用户,将错误记录到日志

注:不要将错误信息返回到应用中,应用中的信息会显示给用户,用户会获取到数据库中的信息,这样本身来说,就是一种不安全的显示,所以 在此过程中可以把错误屏蔽掉,记录到错误日志中,定期查询错误的时候,只要查看错误日志即可

注意:PHP端尽量使用 PDO 对数据库进行相关操作,PDO 拥有定义预处理语句很好的支持的方法,MySQLi 也有,但是可扩展性不如 PDO,效率略高于 PDOMySQL 函数在新版本中已经趋向于淘汰,所以不建议使用,而且它没有很好的支持预处理的方法。


2、延伸:MySQL的其他安全设置

  • 定期做数据备份;
  • 不给查询用户root权限,合理分配权限;
  • 关闭远程访问数据库权限(注:关闭远程访问数据库权限是为了防止数据库被暴力破解);
  • 修改root口令,不用默认口令,使用较复杂的口令;
  • 删除多余的用户;
  • 改变root用户的名称(改一个特殊的,让别人猜不到的名称);
  • 7)限制一般用户浏览其他库(如:现在有三个应用,每个应用建立自己独立的用户,不能去互相的访问对方的库);
  • 8)限制用户对数据文件的访问权限(我们都知道,所有MySQL的数据都存储在文件中,因此我们要对文件做一些权限的限制。如:有3个应用,每个应用都有自己各自的用户,各自的用户不光要限制其MySQL的权限,还要设置MySQL中 data目录下的每一个库的权限,每一个目录的权限)。

二、解题方法

通常情况下,SQL安全的考点都在防SQL注入的问题,因此只要遇到此类考点,优先考虑SQL注入的防护手段。


三、真题

为什么使用PDO和MySQLi连接数据库会比MySQL函数库更加安全?

  • 因为 PDOMySQLi 本身支持预处理;
  • 预处理本身就可以防止SQL注入,因此比MySQL函数库更加安全;
  • MySQL函数库本身是不支持预处理的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值