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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
解析PayPal支付接口的PHP开发方式
Nov 28 PHP
php生成excel文件的简单方法
Feb 08 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
PHP中is_file()函数使用指南
May 08 PHP
PHP读书笔记整理_结构语句详解
Jul 01 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 PHP
PHP与Web页面交互操作实例分析
Jun 02 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
日本十大惊悚动漫
2020/03/04 日漫
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
python去掉行尾的换行符方法
2017/01/04 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
django实现用户登陆功能详解
2017/12/11 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
python实现狄克斯特拉算法
2019/01/17 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
python和js交互调用的方法
2020/06/23 Python
jupyter 添加不同内核的操作
2021/02/06 Python
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
小学教师师德承诺书
2014/05/23 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
结婚十年感言
2015/07/31 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android