当前位置: 首页 > news >正文

php sql注入

文章目录

  • 一、什么是sql注入
  • 二、sql注入处理
      • 1、使用内置函数
      • 2、使用pdo预处理语句
  • 三、安全注意事项

一、什么是sql注入

在应用程序中,为了和用户交互,允许用户提交输入数据,假如应用程序并没有对用户输入数据进行处理,攻击者可以输入一些跟sql语句相关的字符串(一般带有特殊字符)从而让应用程序执行危险的 SQL 操作,导致泄漏机密数据(比如用户信息)或直接修改删除线上的数据。

在这里插入图片描述

二、sql注入处理

1、使用内置函数

函数一: mysqli_real_escape_string

作用: 转义在 SQL 语句中使用的字符串中的特殊字符

语法:


mysqli_real_escape_string($connection, $escapestring);

选项参数:

	connection	必需。规定要使用的 MySQL 连接。
	
	escapestring	必需。要转义的字符串。编码的字符是 NUL(ASCII 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();

三、安全注意事项

  1. 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
  2. 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  3. 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
  4. 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  5. 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
  6. sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具 、MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

相关文章:

  • 向上沟通:你必须要注意的三个误区
  • 【设计模式】创建型模式·原型模式
  • 2023.1. Stimulsoft 报告和仪表板的新版本:Crack
  • Java中的包装类
  • ITIL 问题管理综合指南
  • 广告业务系统 之 业务串联 —— “ PDB - 广告投放【保量保价】”
  • 【初阶数据结构】——写了将近 5 万字,终于把 二叉树 初阶的内容讲清楚了
  • centos8 Ambari-2.7.6.3+HDP-3.3.1离线安装详细教程(附安装包)
  • 如何进行apk反编译?
  • 基于keras构建lstm模型自动生成音乐(完整项目代码+数据)
  • 搞技术的要不要学习财务知识
  • Allegro如何灌铜操作指导
  • C语言电话号码查询系统[2023-01-16]
  • Go语言条件语句
  • 【C++】类和对象【下篇】--初始化列表,static成员,友元,内部类,匿名对象
  • vue3中常用的指令之v-bind和v-on
  • 通达信交易接口怎么实现策略选股?
  • 基于机器学习算法svm、xgb、lgb的购房贷款违约预测实战
  • Oracle中的双引号与单引号
  • 【Redis】使用阻塞队列+Redis优化秒杀业务