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 相关文章推荐
递归列出所有文件和目录
Oct 09 PHP
一个程序下载的管理程序(三)
Oct 09 PHP
PHP新手上路(十三)
Oct 09 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
php对数组内元素进行随机调换的方法
May 12 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
May 12 PHP
PHP token验证生成原理实例分析
Jun 05 PHP
PHP7.3.10编译安装教程
Oct 08 PHP
PHP7 参数处理机制修改
Mar 09 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
风格模板初级不完全修改教程
2006/10/09 PHP
用PHP实现将GB编码转换为UTF8
2006/11/25 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
jquery 上下滚动广告
2009/06/17 Javascript
js闭包的用途详解
2014/11/09 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
vue实现文件上传功能
2018/08/13 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
益模软件Java笔试题
2012/03/27 面试题
商场主管竞聘书
2014/03/31 职场文书
《海底世界》教学反思
2014/04/16 职场文书
结对共建工作方案
2014/06/02 职场文书
节能标语大全
2014/06/21 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP