本文实例讲述了PHP+mysql防止SQL注入的方法。分享给大家供大家参考,具体如下:

SQL注入

例:脚本逻辑

$sql = "SELECT * FROM user WHERE userid = $_GET[userid] ";

案例1:

SELECT * FROM t WHERE a LIKE '%xxx%' OR (IF(NOW=SYSDATE(), SLEEP(5), 1)) OR b LIKE '1=1 ';

案例2:

SELECT * FROM t WHERE a > 0 AND b IN(497 AND (SELECT * FROM (SELECT(SLEEP(20)))a) );

案例3:

SELECT * FROM t WHERE a=1 and b in (1234 ,(SELECT (CASE WHEN (5=5) THEN SLEEP(5) ELSE 5*(SELECT 5 FROM INFORMATION_SCHEMA.CHARACTER_SETS) END)) );

监控以下方法

SLEEP() — 一般的SQL盲注都会伴随SLEEP()函数出现,而且一般至少SLEEP 5秒以上

MID()

CHAR()

ORD()

SYSDATE()

SUBSTRING()

DATABASES()

SCHEMA()

USER()

VERSION()

CURRENT_USER()

LOAD_FILE()

OUTFILE/DUMPFILE

INFORMATION_SCHEMA

TABLE_NAME

fwrite()/fopen()/file_get_contents() — 这几个是PHP文件操作函数

应对方法:

1.mysql_escape_string() 转义特殊字符((PHP 4 >= 4.3.0, PHP 5))(mysql_real_escape_string必须先链接上数据库,否则会报错)

下列字符受影响:

\x00 //对应于ascii字符的NULL

\n  //换行符且回到下一行的最前端

\r //换行符

\ //转义符

'

"

\x1a  //16进制数

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

2.addslashes(): 函数返回在预定义字符之前添加反斜杠的字符串 (stripslashes()实现字符串还原)

预定义的字符有:

单引号(')

双引号(")

反斜杠(\)

NULL

3.prepared  statements(预处理机制)

$mysqli = new mysqli("example.com", "user", "password", "database");

if ($mysqli->connect_errno) {

echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;

}

/* Non-prepared statement */

if (!$mysqli->query("DROP TABLE IF EXISTS test") || !$mysqli->query("CREATE TABLE test(id INT)")) {

echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;

}

/* Prepared statement, stage 1: prepare */

if (!($stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"))) {

echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;

}

/* Prepared statement, stage 2: bind and execute */

$id = 1;

if (!$stmt->bind_param("i", $id)) {

echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;

}

if (!$stmt->execute()) {

echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;

}

?>

希望本文所述对大家PHP程序设计有所帮助。

mysql 防注入 php_PHP+mysql防止SQL注入的方法小结相关推荐

  1. SQL注入-01-什么是SQL注入?

    什么是SQL注入? 1.正常的web端口访问 正常访问是web传入程序设计者所希望的参数值,由程序查询数据库完成处理后,呈现结果页面给用户. 2.SQL注入是如何访问? (1)SQL注入也是正常的we ...

  2. sql注入及mybatis防止sql注入

    一.Sql 注入漏洞详解 Sql 注入产生原因及威胁: 当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句.这种网站内部直接发送的Sql ...

  3. pythonsql注入步骤_防止SQL注入解决方案

    SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.对于很多网站都有用户提交表单的端口,提交的数据插入MySQL数据库中,就有可 ...

  4. 【SQL注入漏洞-01】SQL注入漏洞原理及分类

    SQL注入简介 结构化查询语言(Structured Query Language,缩写︰SQL),是一种特殊的编程语言,用于数据库中的标准数据查询语言. SQL注入(SQL Injection)是一 ...

  5. 反引号注入_什么是 SQL 注入?

    (给ImportNew加星标,提高Java技能) 转自:Java程序员联盟 文章目录: 何谓SQL注入? SQL数据库操作示例 SQL数据库注入示例 如何防止SQL注入问题 SQL数据库反注入示例 何 ...

  6. java sql注入 正则表达式_Java防止SQL注入(转)

    一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...

  7. SQL注入原理及预防SQL注入的方法

    网络安全成为了现在互联网的焦点,这也恰恰触动了每一位用户的神经,担心网上的信息以及个人隐私遭到泄露.下面要为大家介绍的是SQL注入,对于sql注入,相信程序员都知道或者使用过,如果没有了解或完全没有听 ...

  8. php mysql防卡_php mysql防止sql注入详解

    引发 SQL 注入攻击的主要原因,是因为以下两点原因: 1. php 配置文件 php.ini 中的 magic_quotes_gpc选项没有打开,被置为 off 2. 开发者没有对数据类型进行检查和 ...

  9. mysql监测攻击_如何检测SQL注入技术以及跨站脚本攻击

    展开全部 在最近两年中,安全专家应该对网络应用层的攻击更加重e69da5e887aa62616964757a686964616f31333339666164视.因为无论你有多强壮的防火墙规则设置或者非 ...

最新文章

  1. AES(Advanced Encryption Standard) Intrinsics各函数介绍
  2. 开启AngularJS学习之旅
  3. android ScrollView实现上拉、下拉更新
  4. JS 创建对象(常见的几种方法)
  5. RocketMQ的Producer详解之顺序消息(原理)
  6. SQL2017 Azure SQL新功能:图形数据库
  7. 西瓜书+实战+吴恩达机器学习(九)监督学习之k近邻 K-Nearest Neighbor
  8. python3爬取数据存入mysql_pyspider 数据存入Mysql--Python3
  9. 20211201:力扣第268周双周赛(上)
  10. VMWare网络连接方式与设置
  11. Manacher算法(马拉车算法)
  12. 已知ip地址和其子网掩码如何求网络号子网号主机号
  13. gantt(甘特)图
  14. mysql占用内存过高_MySQL内存消耗过高问题处理
  15. 免费临时邮箱,一次性邮箱
  16. Win7 各种语言包下载
  17. 每日一题----空瓶子喝可乐问题
  18. CSP认证:行车路线
  19. java宣传单页_宣传单:从 Map 中删除标记
  20. 虚拟机重启网络失败:Error:Failed to start LSB: Bring up/down networking的解决方法

热门文章

  1. André Weil | 数学史:为什么,怎么看
  2. 围观:各地大学教师自曝近年工资待遇,真实一手数据!
  3. 关于大学老师,我们常有的6种误解!
  4. 上海民警这个方法让汽车提前“助跑”,路口通行效率提10%
  5. 魔都高清特写曝光,外国人眼中的魔幻
  6. 别把数学想得太难,数学是一场游戏
  7. SSDB 配置文件详解
  8. IDC报告:阿里云领跑中国数据库市场年度份额首超传统厂商
  9. 节省服务器成本50%以上!独角兽完美日记电商系统容器化改造实践
  10. 为什么强烈禁止开发人员使用isSuccess作为变量名