php – 使用mysqli预处理语句不会转义哪些字符?

我正在努力强化我的一些PHP代码并使用MysqLi预处理语句来更好地验证用户输入并防止注入攻击.

我转而离开MysqLi_real_escape_string as it does not escape % and _.但是,当我创建我的查询作为MysqLi预备语句时,同样的缺陷仍然存在.该查询根据用户名提取用户salt值.我会为密码和其他查找做类似的事情.

码:

$db = new sitedatalayer();

if ($stmt = $db->_conn->prepare("SELECT `salt` FROM admins WHERE `username` LIKE ? LIMIT 1")) {

  $stmt->bind_param('s', $username);
  $stmt->execute();
  $stmt->bind_result($salt);


  while ($stmt->fetch()) { 
    printf("%s\n", $salt);
  } 

  $stmt->close();    

}

else return false;

>我是否正确地撰写了声明?
>如果我需要检查其他角色?还有哪些其他缺陷?
>做这些选择的最佳做法是什么?

谢谢,

解决方法:

%不是一种固有的有害特征.

问题是:你为什么首先使用LIKE?在任何情况下您都不需要完全匹配用户名吗?

查询应该简单:

SELECT `salt` FROM admins WHERE `username` = ? LIMIT 1

在这种情况下,如果我要输入%bsmith,我的用户名必须是(字面意思)“%bsmith”才能找到匹配项.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...