PHP使用AES加密数据并采用预处理语句防SQL注入
前言
本人在学习PHP编写web端系统时,对如何解决数据安全性问题产生了疑惑。在搜索相关作者文章解决疑惑后,将如何使用AES加密数据,以及如何使用预处理语句防SQL注入的解决方法记录如下。(笔记中给出的例子均为简单的sql语句)
参考文章
PHP+MySQL的AES加密解密(数据脱敏) AES加密算法的详细介绍与实现 php操作mysql防止sql注入(合集)
插入语句
$a="1";
$code="123";
$code=bin2hex(base64_decode(openssl_encrypt($code,'aes-128-ecb','SecretKey')));
$sql=$conn->prepare("insert into test(tid,tpwd) values(?,?)");
$tid=$a;
$tpwd=$code;
$sql->bind_param('ss',$tid,$tpwd);
$sql->execute();
bind_param()语句中,0位置的字符为参数的类型,s代表参数为字符型,i代表参数为整型,d代表参数为双精度浮点型,b代表参数为布尔型。
查询语句
$sql1=$conn->prepare("select tpwd from test where tid=?");
$sql1->bind_param('s',$id);
$id="1";
$sql1->execute();
$res=$sql1->get_result();
$row=$res->fetch_assoc();
echo(openssl_decrypt (base64_encode(hex2bin($row["tpwd"])),'aes-128-ecb','SecretKey'));
这里使用的查询方式为精确查找,模糊查找这里未作描述,可参考PHP+MySQL的AES加密解密(数据脱敏)文章里给出的例子编写。
总结
信息安全是信息化是时代大家所关注的重点问题之一,使用预处理语句和AES算法加密数据,可以有效的防治SQL注入,确保数据库中数据安全。编写此文章主要作为个人笔记,方便以后查阅和使用。
|