现在我进行模糊查询是靠字符串的拼接,代码如下:
$sql = "SELECT * FROM pdns.rdata_copy WHERE rdomain LIKE '%".$_GET['domain']."'";
$ccdomain = $db->rawQuery($sql);
但是这样不就成了 SQL 注入了么,能否可以有一些库函数进行 预编译的那种分离的 可以直接调用呢?
1
kaolalotree 2017-01-09 21:25:25 +08:00
对获取的参数封一层 addcslash 呗
|
2
odoooo 2017-01-09 21:28:20 +08:00 via iPhone
pdo
|
3
Jakesoft 2017-01-09 22:05:48 +08:00
楼主看一下 pdo 的预处理语句和参数绑定
|
4
jarlyyn 2017-01-09 22:13:49 +08:00
pdo
|
5
wh1012023498 2017-01-09 23:09:13 +08:00
|
6
mingl0280 2017-01-10 02:43:51 +08:00
Mysqli 的 Prepared 语句
PDO 的 Prepared 语句 都可以完全解决注入问题。 例如 $sqli = new mysqli(); $sqli->connect(host, username, password, database); $stmt = $sqli->prepare('SELECT passhash FROM users WHERE username=?'); $usn = $_POST['User']; $stmt->bind_param('s', $usn); $stmt->execute(); $stmt->bind_result($queryResult); $stmt->fetch(); if (strtolower($queryResult) == strtolower($_POST['pass'])) |
7
txlty 2017-01-10 03:54:08 +08:00
字符串拼接可以用。但不能直接把外部数据拼进来。必须处理一下。
最古老的函数是 addslashes , mysql 对应函数是 mysql_real_escape_string 。 mysqli 对应函数是 mysqli_real_escape_string , PDO 对应方法是 quote 。 前两者在 GBK 编码下会间接产生漏洞。推荐后两者。 |
8
abc123ccc 2017-01-10 08:07:48 +08:00
1 、模糊查询: PDO 首选,楼上已经给出方法了,我就不写了。
2 、成熟库:网上到有一个据说是 TP3.1 框架内挖出来的库,不晓得楼主能不能使用得习惯。好像还有一个近似 CI 用的 DB 库。我就知道这两个在网上能找到。这些都是用 PDO 的。 |