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产生随机字符串函数
Dec 06 PHP
php 获取可变函数参数的函数
Aug 26 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
php获取twitter最新消息的方法
Apr 14 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
Zend Studio使用技巧两则
Apr 01 PHP
php文件上传的两种实现方法
Apr 04 PHP
php实现三级级联下拉框
Apr 17 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
Sep 11 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 PHP
PHP时间类完整代码实例
Feb 26 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
PHP利用COM对象访问SQLServer、Access
2006/10/09 PHP
文章推荐系统(三)
2006/10/09 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
Python基于twisted实现简单的web服务器
2014/09/29 Python
python中黄金分割法实现方法
2015/05/06 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
Python装饰器用法实例总结
2018/02/07 Python
python写入文件自动换行问题的方法
2019/07/05 Python
python3注册全局热键的实现
2020/03/22 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
python中实现词云图的示例
2020/12/19 Python
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
毕业生实习鉴定
2013/12/11 职场文书
社区志愿者心得体会
2014/01/03 职场文书
个人承诺书怎么写
2014/05/24 职场文书
信仰心得体会
2014/09/05 职场文书
工作检讨书大全
2015/01/26 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
产品调价通知函
2015/04/20 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis