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(3)
Oct 09 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
PHP将进程作为守护进程的方法
Mar 19 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
各种快递查询--Api接口
Apr 26 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
php while循环控制的简单实例
May 30 PHP
PHP类的自动加载机制实现方法分析
Jan 10 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 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代码
2008/04/09 PHP
PHP 分页原理分析,大家可以看看
2009/12/21 PHP
利用json获取字符出现次数的代码
2012/03/22 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
bootstrap中的 form表单属性role=&quot;form&quot;的作用详解
2017/01/20 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
Python探索之Metaclass初步了解
2017/10/28 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
新闻专业个人自我评价
2013/09/21 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
人力资源职位说明书
2014/07/29 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
怎么用Python识别手势数字
2021/06/07 Python
使用Springboot实现健身房管理系统
2021/07/01 Java/Android