php sql注入
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
一、什么是sql注入
在应用程序中为了和用户交互允许用户提交输入数据假如应用程序并没有对用户输入数据进行处理攻击者可以输入一些跟sql语句
相关的字符串一般带有特殊字符从而让应用程序执行危险的 SQL 操作
导致泄漏
机密数据(比如用户信息)或直接修改删除
线上的数据。
二、sql注入处理
1、使用内置函数
函数一 mysqli_real_escape_string
作用 转义
在 SQL 语句中使用的字符串中的特殊字符
。
语法
mysqli_real_escape_string($connection, $escapestring);选项参数 connection 必需。规定要使用的 MySQL 连接。 escapestring 必需。要转义的字符串。编码的字符是 NULASCII 0、\n、\r、\、'、" 和 Control-Z。
函数二 addcslashes()
主要用来防止like语句
注入)
作用 使用反斜线转义字符串中的字符
语法
addcslashes($string, $characters)选项参数 string 必需。规定要转义的字符串。 characters 必需。规定要转义的字符或字符范围。
例
//获取用户名$username = $_GET['username']; //将特殊字符转义为普通字符$username = addcslashes(mysqli_real_escape_string($conn, $username), "%_");//执行sql语句操作mysqli_query($conn, "SELECT FROM messages WHERE username LIKE '{$username}%'");
2、使用pdo预处理语句
pdo 预处理语句会对占位符绑定的值进行处理也可以有效防止sql注入攻击
函数 PDO::prepare
语法
public PDO::prepare(string $query, array $options = []): PDOStatement|false选项参数 query必须是对目标数据库服务器有效的 SQL 语句模板。 options数组包含一个或多个 key=>value 键值对为返回的 PDOStatement 对象设置属性。 常见用法是设置 PDO::ATTR_CURSOR 为 PDO::CURSOR_SCROLL将得到可滚动的光标。 某些驱动有驱动级的选项在 prepare 时就设置。
例
/* 传入数组的值并执行已预处理的语句 */$sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour';$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);$sth->execute(['calories' => 150, 'colour' => 'red']);$red = $sth->fetchAll();/* Array keys can be prefixed with colons ":" too (optional) */$sth->execute([':calories' => 175, ':colour' => 'yellow']);$yellow = $sth->fetchAll();
三、安全注意事项
永远不要信任用户的输入。对用户的输入进行校验可以通过正则表达式或限制长度对单引号和 双"-"进行转换等。
永远不要使用动态拼装sql可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
永远不要使用管理员权限的数据库连接为每个应用使用单独的权限有限的数据库连接。
不要把机密信息直接存放加密或者hash掉密码和敏感的信息。
应用的异常信息应该给出尽可能少的提示最好使用自定义的错误信息对原始错误信息进行包装
sql注入的检测方法一般采取辅助软件或网站平台来检测软件一般采用sql注入检测工具jsky网站平台就有亿思网站安全平台检测工具 、MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入XSS攻击等。
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |