首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
spring
instance
function
buffer
testing
post
tags
version
config
dll
js
php8
case
bytecode
byte
request
export
httpclient
bitmap
hook
javascript
window
actionscrip
settings
grid
web3
fetch
jsp
process
keyword
runtime
foreach
ascii
sum
blob
include
command
shell
hash
metadata
bit
jar
object
frameworks
scala
datetime
cSharp
uml
const
integer
php
cmd
split
regex
list
filter
random
import
python2
expression
text
c语言
usb
get
tree
heap
char
go
cookie
php5
future
cPlusPlus
httprequest
default
web
perl
subset
schema
search
当前位置:
开发笔记
>
编程语言
> 正文
用PHP函数解决SQLInjection
作者:乌龟考拉互受 | 来源:互联网 | 2017-06-26 01:21
文章标题:用PHP函数解决SQLInjection。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
SQL injection问题在ASP上可是闹得沸沸扬扬?当然还有不少国内外著名的PHP程序“遇难”。至于SQL injection的详情,网上的文章太多了,在此就不作介绍。
如果你网站空间的php.ini文件里的magic_quotes_gpc设成了off,那么PHP就不会在敏感字符前加上反斜杠(\),由于表单提交的内容可能含有敏感字符,如单引号('),就导致了SQL injection的漏洞。在这种情况下,我们可以用addslashes()来解决问题,它会自动在敏感字符前添加反斜杠。
但是,上面的方法只适用于magic_quotes_gpc=Off的情况。作为一个开发者,你不知道每个用户的magic_quotes_gpc是On还是Off,如果把全部的数据都用上addslashes(),那不是“滥杀无辜”了?假如magic_quotes_gpc=On,并且又用了addslashes()函数,那让我们来看看:
//如果从表单提交一个变量$_POST['message'],内容为 Tom's book
//这此加入连接MySQL数据库的代码,自己写吧
//在$_POST['message']的敏感字符前加上反斜杠
$_POST['message'] = addslashes($_POST['message']);
//由于magic_quotes_gpc=On,所以又一次在敏感字符前加反斜杠
$sql = "INSERT INTO msg_table VALUE('$_POST[message]');";
//发送请求,把内容保存到数据库内
$query = mysql_query($sql);
//如果你再从数据库内提取这个记录并输出,就会看到 Tom\'s book
?>
这样的话,在magic_quotes_gpc=On的环境里,所有输入的单引号(')都会变成(\')……
其实我们可以用get_magic_quotes_gpc()函数轻易地解决这个问题。当magic_quotes_gpc=On时,该函数返回TRUE;当magic_quotes_gpc=Off时,返回FALSE。至此,肯定已经有不少人意识到:问题已经解决。请看代码: //如果magic_quotes_gpc=Off,那就为提单提交的$_POST['message']里的敏感字符加反斜杠
//magic_quotes_gpc=On的情况下,则不加
if (!get_magic_quotes_gpc()) {
$_POST['message'] = addslashes($_POST['message']);
} else {}
?>
其实说到这里,问题已经解决。下面再说一个小技巧。
有时表单提交的变量不止一个,可能有十几个,几十个。那么一次一次地复制/粘帖addslashes(),是否麻烦了一点?由于从表单或URL获取的数据都是以数组形式出现的,如$_POST、$_GET)?那就自定义一个可以“横扫千军”的函数: function quotes($content)
{
//如果magic_quotes_gpc=Off,那么就开始处理
if (!get_magic_quotes_gpc()) {
//判断$content是否为数组
if (is_array($content)) {
//如果$content是数组,那么就处理它的每一个单无
foreach ($content as $key=>$value) {
$content[$key] = addslashes($value);
}
} else {
//如果$content不是数组,那么就仅处理一次
addslashes($content);
}
} else {
//如果magic_quotes_gpc=On,那么就不处理
}
//返回$content
return $content;
}
?>
sql
php
mysql
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
js
解决phpMyAdmin运行错误:mysqli_init(): 属性访问尚未允许
本文探讨了在使用phpMyAdmin过程中遇到的mysqli_init()函数错误,并提供了有效的解决方案。 ...
[详细]
蜡笔小新 2024-12-04 17:35:56
jsp
SQL查询中字符集导致的结果差异探讨
本文探讨了在执行SQL查询时遇到的因字符集不同而导致查询结果差异的问题,特别是涉及中文字符时。文章分析了在不同字符集设置下,SQL查询结果的变化,并提供了详细的解决方案。 ...
[详细]
蜡笔小新 2024-12-04 16:39:13
jsp
SQL注入实验:SqliLabs第38至45关解析
本文深入探讨了SqliLabs项目中的第38至45关,重点讲解了堆叠注入(Stacked Queries)的应用技巧及防御策略。通过实际案例分析,帮助读者理解如何利用和防范此类SQL注入攻击。 ...
[详细]
蜡笔小新 2024-12-04 11:17:35
jsp
KKCMS代码审计初探
本文主要介绍了KKCMS的安装过程及其基本功能,重点分析了该系统中存在的验证码重用、SQL注入及XSS等安全问题。适合初学者作为入门指南。 ...
[详细]
蜡笔小新 2024-12-04 09:30:07
jsp
SQL 中的 CHECK 约束详解
本文详细介绍了 SQL 中的 CHECK 约束,包括其作用、如何在创建表和修改表时应用 CHECK 约束,以及如何删除 CHECK 约束。CHECK 约束用于确保数据库中的数据符合预定义的条件,从而提高数据的完整性和可靠性。 ...
[详细]
蜡笔小新 2024-12-05 07:43:54
jsp
深入理解MySQL基础:SQL语言的应用与实践
本文详细介绍了MySQL中SQL语言的基础知识,包括DQL语句分类、SQL语句的书写规则以及如何使用Navicat导入SQL文件等内容,旨在为初学者提供全面的指导。 ...
[详细]
蜡笔小新 2024-12-05 07:30:21
request
C# - 解决从数据库中筛选未使用ID的问题
本文探讨了如何在C#应用程序中有效处理来自两个不同数据库的数据,特别是当需要从一个数据库中选择不在另一个大型集合中的ID时遇到的挑战和解决方案。 ...
[详细]
蜡笔小新 2024-12-04 21:40:43
jsp
JSP数据库连接实践及常见问题解析
本文详细探讨了JSP环境下数据库连接的实现方法,包括环境配置、代码示例以及常见的连接问题及其解决方案。 ...
[详细]
蜡笔小新 2024-12-04 16:25:37
jsp
MySQL中如何为字段添加注释
本文详细介绍了在MySQL数据库中为字段添加注释的两种方法,并提供了具体的SQL语句示例,帮助开发者更好地管理和理解数据库结构。 ...
[详细]
蜡笔小新 2024-12-04 14:47:23
jsp
MySQL 中分页与模糊查询的陷阱及解决方案
本文探讨了在 MySQL 数据库中使用 LIKE 语句进行模糊查询并结合分页处理时可能遇到的问题,并提出了解决这些潜在陷阱的有效方法。 ...
[详细]
蜡笔小新 2024-12-04 13:34:01
jsp
oracle中的数据集合操作
一、数据更新操作DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据、修改数据、删除数据。其中这些操作是离不开查询的。1、增加数据语法:INSERTINTO表名称[(字 ...
[详细]
蜡笔小新 2024-12-04 12:15:42
jsp
使用Percona插件监控MySQL 5.7的最佳实践
本文详细介绍了如何通过Percona插件监控MySQL 5.7数据库,包括环境准备、插件安装、配置调整及数据测试等步骤,旨在为用户提供一个高效且稳定的监控解决方案。 ...
[详细]
蜡笔小新 2024-12-04 11:50:37
jsp
Django框架的使用教程mysql数据库[三]
Django的数据库1.在Django_test下的view.py里面model定义模型fromdjango.dbimportmodels#Createyourmodelshere ...
[详细]
蜡笔小新 2024-12-04 11:29:56
process
PHP与MySQL Web开发初探——第一章概览
本文详细记录了《PHP与MySQL Web开发》第一章的学习心得,特别关注了PHP的基本构成元素、标记风格、编程注意事项及表单处理技巧等内容。 ...
[详细]
蜡笔小新 2024-12-04 08:25:58
function
解决Windows 2003上MySQL连接失败的问题
本文详细探讨了在Windows Server 2003环境下遇到MySQL连接失败(错误代码10061)的解决方案,包括通过卸载特定的Windows更新和调整系统注册表设置的方法。 ...
[详细]
蜡笔小新 2024-12-03 19:23:31
乌龟考拉互受
这个家伙很懒,什么也没留下!
Tags | 热门标签
spring
instance
function
buffer
testing
post
tags
version
config
dll
js
php8
case
bytecode
byte
request
export
httpclient
bitmap
hook
javascript
window
actionscrip
settings
grid
web3
fetch
jsp
process
keyword
RankList | 热门文章
1
Win10注册表关闭自动更新方法分享
2
java.util.AbstractSet.toString()方法的使用及代码示例
3
Linux下Google Test (GTest)测试环境搭建步骤
4
给硬件工程师的入门课系统框图的设计
5
WIN7LITE7.658EX (240M) 免费企业版
6
看官_在GitHub Actions上进行Flutter 的测试和部署
7
lightgbm过去版本安装包_集成学习算法LightGBM
8
如何证明js中的function是引用类型?
9
ENV变量不通过godotenvDocker
10
20150928Javascript(一)
11
使用代理ip防止爬虫被封ip(附蘑菇代理开发过程)
12
695岛屿最大面积leetcode深度优先搜索
13
Storm集成Kakfa
14
[源码和文档分享]基于JAVA和MYSQL数据库实现的小型公司工资管理系统
15
树莓派python3.7安装tensorflow_树莓派安装TensorFlow
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有