PHP+mysql防止SQL注入的方法小结


Posted in PHP onApril 27, 2019

本文实例讲述了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(预处理机制)

<?php
$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程序设计有所帮助。

PHP 相关文章推荐
菜鸟学PHP之Smarty入门
Jan 04 PHP
用PHP的ob_start() 控制您的浏览器cache
Aug 03 PHP
Php Image Resize图片大小调整的函数代码
Jan 17 PHP
PHP中的日期加减方法示例
Aug 21 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
PHP的Yii框架中Model模型的学习教程
Mar 29 PHP
Laravel+jQuery实现AJAX分页效果
Sep 14 PHP
php实现的中文分词类完整实例
Feb 06 PHP
php pdo操作数据库示例
Mar 10 PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 PHP
php测试kafka项目示例
Feb 06 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 #PHP
PHP操作路由器实现方法示例
Apr 27 #PHP
PHP切割汉字的常用方法实例总结
Apr 27 #PHP
YII框架常用技巧总结
Apr 27 #PHP
YII框架行为behaviors用法示例
Apr 26 #PHP
YII框架模块化处理操作示例
Apr 26 #PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 26 #PHP
You might like
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
第一节--面向对象编程
2006/11/16 PHP
开源SNS系统-ThinkSNS
2008/05/18 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
jquery tools之tooltip
2009/07/25 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
讲解Python中的递归函数
2015/04/27 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
python模块smtplib学习
2018/05/22 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
django从后台返回html代码的实例
2020/03/11 Python
详解python UDP 编程
2020/08/24 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
UNIX特点都有哪些
2016/04/05 面试题
servlet面试题
2012/08/20 面试题
设计毕业生简历中的自我评价
2013/10/01 职场文书
军训教官感言
2014/03/02 职场文书
校园演讲稿汇总
2014/05/21 职场文书
会计专业自荐书
2014/07/08 职场文书
防灾减灾活动总结
2014/08/30 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js