php阻止输入sql,在PHP中全面阻止SQL注入式攻击之三

一、 建立一个安全抽象层

我们并不建议你手工地把前面介绍的技术应用于每一个用户输入的实例中,而是强烈推荐你为此创建一个抽象层。一个简单的抽象是把你的校验方案加入到一个函数中,并且针对用户输入的每一项调用这个函数。当然,我们还可以创建一种更复杂的更高一级的抽象-把一个安全的查询封装到一个类中,从而应用于整个应用程序。在网上已经存在许多这种现成的免费的类;在本篇中,我们正要讨论其中的一些。

进行这种抽象至少存在三个优点(而且每一个都会改进安全级别):

1. 本地化代码。

2. 使查询的构造更快且更为可靠-因为这可以把部分工作交由抽象代码来实现。

3. 当基于安全特征进行构建并且恰当使用时,这将会有效地防止我们前面所讨论的各种各样的注入式攻击。

二、 改进现有的应用程序

如果你想改进一个现有的应用程序,则使用一个简单的抽象层是最适当的。一个能够简单地"清理"你所收集的任何用户输入内容的函数可能看起来如下所示:

function safe( $string ) {

return "'" . mysql_real_escape_string( $string ) . "'"

}

【注意】我们已经构建了相应于值要求的单引号以及mysql_real_escape_string()函数。接下来,就可以使用这个函数来构造一个$query变量,如下所示:

$variety = safe( $_POST['variety'] );

$query = " SELECT * from wines WHERE variety=" . $variety;

现在,你的用户试图进行一个注入式攻击-通过输入下列内容作为变量$variety的值:

lagrein' or 1=1;

注意,如果不进行上面的"清理",则最后的查询将如下所示(这将导致无法预料的结果):

SELECT * from wines WHERE variety = 'lagrein' or 1=1;'

然而现在,既然用户的输入已经被清理,那么查询语句就成为下面这样一种无危害的形式:

SELECT * from wines WHERE variety = 'lagrein\' or 1=1\;'

既然数据库中不存在与指定的值相应的variety域(这正是恶意用户所输入的内容-lagrein' or 1=1;),那么,这个查询将不能返回任何结果,并且注入将会失败。

三、 保护一个新的应用程序

如果你正在创建一个新的应用程序,那么,你可以从头开始创建一个安全抽象层。如今,PHP 5新改进的对于MySQL的支持(这主要体现在新的mysqli扩展中)为这种安全特征提供了强有力的支持(既有过程性的,也有面向对象特征的)。你可以从站点http://php.net/mysqli上获取有关mysqli的信息。注意,只有�

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle12081,【Oracle介质】Oracle 12C Linux x86-64 最新OPatch patch 6880880 12.2.0.1.7

天萃荷净Linux x86-64 补丁程序6880880: OPatch patch of version 12.2.0.1.7 for Oracle software releases 12.1.0.x (installer) and 12.2.0.x (AUG 2016)上次更新时间 2016-8-26 上午1:48 (8 天前)产品 Oracle Global Lifecycle Management OPatc…

如何使用oracle ebs,Oracle EBS进行集成的实际操作步骤

我们今天主要向大家介绍的是如何使用WebService和Oracle EBS进行集成,以及在使用WebService和Oracle EBS进行集成时,所需要的一些项目的描述,以下的文章就是对相关内容的描述。架构系统从总体上分为两部分,一部为企业的EBS及接口系…

linux nls_lang oracle,linux操作系统环境变量LANG和NLS_LANG的区别

例如:复制代码代码如下:export LANGzh_CN.GB2312export NLS_LANGAMERICAN_AMERICA.ZHS16GBK$export LANGzh_CN.GB2312$date2012年 11月 27日 星期二 16:20:35 CST显示是中文界面。复制代码代码如下:$export NLS_LANGAMERICAN_AMERICA.ZHS16GBK$sqlplus / as sysdbaS…

oracle监听 3个配置文件,Oracle 11g 监听 配置修改 说明

这里我们看2个比较常用的操作。1. 停止写listener log在某些特定的场合可能会有这样的需求。控制这个功能的参数是LOG_STATUS。 官网对这个参数的说明:To turn listenerlogging on or off.--在OS层面直接使用:lsnrctl SET LOG_STATUS {on | off}--在LSNR…

suse linux如何重置密码忘记,SUSE Linux忘记root密码的处理办法

GRUB修改法注意:此办法仅适用SLES8、SLES9,不适用于SLES10,SLES10请用光盘修改法。此办法不适合用于grub启动超时时间为0的机器,因为grub超时时间设置为0后,不能编辑grub选项,此类机器必须使用光盘或网络引…

linux怎么启动端口服务,Linux 根据端口快速停止服务并启动的办法

ll /proc/7167结果为:[rootcentos76 deploy]# ll /proc/7167total 0dr-xr-xr-x 2 root root 0 Jun 25 11:13 attr-rw-r--r-- 1 root root 0 Jun 25 11:13 autogroup-r-------- 1 root root 0 Jun 25 11:13 auxv-r--r--r-- 1 root root 0 Jun 25 11:05 cgroup--w------- 1 root …

linux进程增删改查,iptables的增删改查

iptables是自带的防火墙,功能强大,学习起来需要一段时间,下面是一些习iptables的时候的记录。如果iptables不熟悉的话可以用apf,是一款基于iptables的防火墙,挺好用的。一,安装并启动防火墙[root ~]# /etc/init.d/ipta…

重装系统 linux启动windows系统文件在哪里,Win-Lin双系统重装Windows找回Linux启动

第一系统Windows,第二系统Linux:Ubuntu18.10;1. 重新安装Windows系统后,使用Ubuntu的安装光盘,或启动U盘启动电脑;2. 选择:Try Ubuntu ;3. 进入Ubuntu界面,打开命令行终端(Ctrl Alt…

linux远程监控毕业设计,毕业设计论文:基于嵌入式Linux远程监控系统的设计与实现.doc...

摘 要可编程逻辑控制器(PLC)不仅在工业控制中应用越来越广泛,而且在其他领域的应用也逐渐扩大,例如:电力、化工、能源、水利等。由于它的功能比较强大、使用安全可靠、维护简单方便的优点,在很多地方已经取代了继电器电路的逻辑控…

linux卡死在选择内核界面,求助:am3352 linux内核启动时卡在 Starting kernel ...

这是用光盘里的uImage的输出信息:U-Boot# tftp 0x82000000 bakuImagelink up on port 0, speed 100, full duplexUsing cpsw deviceTFTP from server 192.168.0.231; our IP address is 192.168.0.224Filename bakuImage.Load address: 0x82000000Loading: ########…

u盘分为windows和linux启动,【电脑软件】Ventoy 官方版,一个U盘,同时拥有启动win+linux+Ubuntu...

软件介绍:Ventoy是一个制作可启动U盘的开源工具。有了Ventoy你就无需反复地格式化U盘,你只需要把ISO文件拷贝到U盘里面就可以启动了,无需其他操作。 你可以一次性拷贝很多个不同类型的ISO文件,在启动时Ventoy会显示一个菜单来选择…

linux cpu频率软件,linux cpu频率控制

安装cpufrequtils: sudo apt-get install cpufrequtils查看cpu: sudo cpufreq-info设置cpu模式: cpufreq-set -g {powersave, userspace, ondemand, conservative, performance}对应于{最省电(最低频率)&#xff0…

linux var 空间不足,/var空间不足怎么办?(求安全保险的方法)

最近想把Ubuntu从12.04升级到13.10,可/var目录下的空间不足,怎么处理这个问题?提示需要850M多的空间,可从以下的信息来看,里面的东西我几乎是没得删除了。# du -h --max-depth1 /var92K /var/crash4.0K /var/local4.0K…

linux 权限测试,linux下检测root权限的shell脚本

个人心血来潮时写的一个脚本,比较粗糙,功能也很简单,大家有兴趣的可以拿去改改。本脚本之争对系统中UID为0的用户#!/bin/bash #大家都知道echo test my computer is or not safety #显示“ test my computer is or not saf…

嵌入式linux 网络唤醒,C语言实现wake on lan(网络唤醒...-Windows系统下用命令行编译C/C++...-字符串常量引起的思考_169IT.COM...

前一段时间在自学linux系统,想模仿linux命令行的方式在Windows下编译C/C程序,摸索一段时间后总算把这个解决了!(1)先用记事本编写如下所示的代码,并另存为hello.cpp,假设其保存路径为C:\Users\Administrator\Desktop。…

linux更新函数,linux系统不同对象升级方法详细介绍

当我们使用Linux一段时间以后,自然不会满足总是在没有任何变化的系统中工作,而是渴望能象在Windows系统中一样,不断对自己的Linux进行升级。另一方面,Linux本身就是一个开放的系统,每天都会有新的软件出现,…

linux7 3怎么修改mac地址,Ubuntu 16.04修改MAC地址以及网络常用设置

1、先停止桌面版自带的NetworkManager,这东西很难用,且有些设置需要重启。sudo systemctl stop NetworkManager.servicesudo systemctl disable NetworkManager.service2、设置MAC地址在帮助文档中应该找这个关键字:hardware address&#xf…

Linux刻录光盘win10认不到,Win10无法读取DVD光驱和刻录光盘怎么办 Win10不能读取DVD光驱和刻录光盘解决方法...

近来,有位win10系统用户反映自己的电脑因为没有安装杀毒软件,而使电脑中了病毒,导致自己的DVD光驱不能使用,出现了无法读取光盘资料也无法刻录光盘的问题,而且DVD光驱显示的是CD驱动器。这该怎么办呢?下面&…

linux查看文件位置命令bwd,linux 操作系统中find文件搜索命令的使用

文件搜索命令是:find命令所在路径是:/bin/find执行权限:所有用户语法:find [搜索范围] [匹配条件]范例:find /etc -name init 这个是比较精准的要找文件的find /etc -name *init* 这个模糊的查找的,只有有init这几个…

linux 定时执行搅拌,Linux上定时shell脚本

本文主要介绍在Linux系统上部署定时器,定时执行shell脚本,通过脚本执行sql文件sql文件-- 创建表create table if not exists iot_test.iot_tac(MSISDN string,TAC string)partitioned by(day string)row format delimitedfields terminated by \tlines t…