php防止sql注入的一般操作

首先我们先对常见的sql注入进行了解

当我们从一个表单获取变量后传入到php,需要查询mysql或者存储的时候。

$variable = $_POST['input'];?
mysqli_query("INSERT INTO table (column) VALUES ('" . variable . "')");?

用户可以输入诸如 : value'); DROP TABLE table; ,SQL语句就变成这样了:

INSERT INTO table (column) VALUES('value'); DROP TABLE table;')?

如果用户知道表明,table表就会被删掉。那么我们在程序中如何预防呢?

1.addslashes()

addslashes()用于对变量中的' " \和NULL添加\斜杠,进行转移后用于避免传入sql语句的参数格式错误,同时如果有人注入子查询,通过加\可以将参数解释为内容,而非执行语句,避免被mysql执行。addslashes()屏蔽大多数sql
注入。
2.使用预处理查询
使用预处理查询可以有效的防止sql注入,预处理查询可以使mysql认识到哪些是变量不会对其做解析处理,使其完成sql的防注入例如使用mysqli的预处理方法:
$mysqli = new mysqli("host", "user", "password", "database");
$stmt = $mysqli>prepare("SELECT id, name FROM table WHERE id = ?");
$stmt>bind_param(1, $id);
$stmt>execute();
$res = $stmt>get_result();
$row = $res>fetch_assoc();
在代码中?的作用是代替变量的位置,然后再bind_param中进行参数绑定,然后执行得到结果。

2017-10-09

0 个评论