在PHP中全面阻止SQL注入式攻击

 更新时间:2016年11月25日 16:08  点击:2146

 

 在本系列文章中,我们将全面探讨如何在PHP开发环境中全面阻止SQL注入式攻击,并给出一个具体的开发示例。

  一、 引言

  PHP是一种力量强大但相当容易学习的服务器端脚本语言,即使是经验不多的程序员也能够使用它来创建复杂的动态的web站点。然而,它在实现因特网服务的秘密和安全方面却常常存在许多困难。在本系列文章中,我们将向读者介绍进行web开发所必需的安全背景以及PHP特定的知识和代码-你可以借以保护你自己的web应用程序的安全性和一致性。首先,我们简单地回顾一下服务器安全问题-展示你如何存取一个共享宿主环境下的私人信息,使开发者脱离开生产服务器,维持最新的软件,提供加密的频道,并且控制对你的系统的存取。

  然后,我们讨论PHP脚本实现中的普遍存在的脆弱性。我们将解释如何保护你的脚本免于SQL注入,防止跨站点脚本化和远程执行,并且阻止对临时文件及会话的"劫持"。

  在最后一篇中,我们将实现一个安全的Web应用程序。你将学习如何验证用户身份,授权并跟踪应用程序使用,避免数据损失,安全地执行高风险性的系统命令,并能够安全地使用web服务。无论你是否有足够的PHP安全开发经验,本系列文章都会提供丰富的信息来帮助你构建更为安全的在线应用程序。

  二、 什么是SQL注入

  如果你打算永远不使用某些数据的话,那么把它们存储于一个数据库是毫无意义的;因为数据库的设计目的是为了方便地存取和操作数据库中的数据。但是,如果只是简单地这样做则有可能会导致潜在的灾难。这种情况并不主要是因为你自己可能偶然删除数据库中的一切;而是因为,当你试图完成某项"无辜"的任务时,你有可能被某些人所"劫持"-使用他自己的破坏性数据来取代你自己的数据。我们称这种取代为"注入"。

  其实,每当你要求用户输入构造一个数据库查询,你是在允许该用户参与构建一个存取数据库服务器的命令。一位友好的用户可能对实现这样的操作感觉很满意;然而,一位恶意的用户将会试图发现一种方法来扭曲该命令,从而导致该被的扭曲命令删除数据,甚至做出更为危险的事情。作为一个程序员,你的任务是寻找一种方法来避免这样的恶意攻击。

  三、 SQL注入工作原理

  构造一个数据库查询是一个非常直接的过程。典型地,它会遵循如下思路来实现。仅为说明问题,我们将假定你有一个葡萄酒数据库表格"wines",其中有一个字段为"variety"(即葡萄酒类型):

  1. 提供一个表单-允许用户提交某些要搜索的内容。让我们假定用户选择搜索类型为"lagrein"的葡萄酒。

  2. 检索该用户的搜索术语,并且保存它-通过把它赋给一个如下所示的变量来实现:

  $variety = $_POST[''variety''];

  因此,变量$variety的值现在为:

  lagrein

  3. 然后,使用该变量在WHERE子句中构造一个数据库查询:

  $query = "SELECT * FROM wines WHERE variety=''$variety''";

  所以,变量$query的值现在如下所示:

  SELECT * FROM wines WHERE variety=''lagrein''

  4. 把该查询提交给MySQL服务器。

  5. MySQL返回wines表格中的所有记录-其中,字段variety的值为"lagrein"。
  到目前为止,这应该是一个你所熟悉的而且是非常轻松的过程。遗憾的是,有时我们所熟悉并感到舒适的过程却容易导致我们产生自满情绪。现在,让我们再重新分析一下刚才构建的查询。

  1. 你创建的这个查询的固定部分以一个单引号结束,你将使用它来描述变量值的开始:

  $query = " SELECT * FROM wines WHERE variety = ''";

  2. 使用原有的固定不变的部分与包含用户提交的变量的值:

  $query .= $variety;

  3. 然后,你使用另一个单引号来连接此结果-描述该变量值的结束:

  $ query .= "''";

  于是,$query的值如下所示:

  SELECT * FROM wines WHERE variety = ''lagrein''
  这个构造的成功依赖用户的输入。在本文示例中,你正在使用单个单词(也可能是一组单词)来指明一种葡萄酒类型。因此,该查询的构建是无任何问题的,并且结果也会是你所期望的-一个葡萄酒类型为"lagrein"的葡萄酒列表。现在,让我们想象,既然你的用户不是输入一个简单的类型为"lagrein"的葡萄酒类型,而是输入了下列内容(注意包括其中的两个标点符号):

  lagrein'' or 1=1;

<


在PHP5中类(CLASS)的新特征

/******************************/
author:大龄青年
E_mail:wenadmin@sina.com
/*****************************/

php5新添加了好多的新函数和特征,但是在目前最新的chm的手册中都没有体现,要到在线的手册中查找,烦啊!!!

 

废话不多说了,来看看php5中全新的class对比php2的class有什么新的特征。

 

1/ 加了访问权限的控制:使用private/public/protected的特征

 

2/ 加入了接口和抽象类的概念,interface/abstract,可惜的是类的继承还是树形的单继承。

 

3/ 可以定义final 函数,不能在父类中覆盖这个函数

 

4/ 终于可以在类中定义 静态的变量,在php中只能在函数中定义,

  

static $aa = nulll;

    另外还提供了 const 方法

         const mystatic = ''aaaaaa'';

 

5/ 新提供了一个self内部方法

       echo self::mystatic;

 

6/ 加入了如下的内部特征

__construct()   初始化

__destruct();   卸载

__get();          组织返回类中的某些变量值。

__set();          组织给类中的某些变量值赋值。

__call();         调用不存在的类的函数的时候得处理方法

__clone();        copy对象用

__sleep();        序列化的时候用

__weekup();      反序列的时候用

 

7/ 默认的object的赋值采用了应用的方式,如:

$object2 = $object1

   $object2 得到的是$object1的引用,不是在内存中copy副本

 

8/ 提供了 reflection API ,主要用来显示class/function 本省的结构和统计信息,这个是一个全新的东西,很难说清楚,(虽然很强大,但是我个人还是没有找到“这位英雄可以用武的地方”)

 

9/ 对class对象提供了一个枚举的功能,可以用for循环来处理对象中的全局的变量。

 

10/ 提供了一个__autoload();函数,用来自动的加载类声明文件

 

详细情况:http://www.php.net/manual/en/language.oop5.basic.php

临时修改php.ini文件

ini_set("项目","值");

ini_set("output_buffering","0");
ob_start();
 




歌道“最近比较烦”,我云“最近比较忙”,但无论烦与忙,都不能阻止我对技术的追求,亦不能打断我要做中国开源事业的脚步。

作为我提出已久的jwork框架,终于,于2007年未,形成了php第一版。

Jwork框架分为三种语言:
Java版
.Net版
PHP版

目前,java和.net版处于研发阶段。php版jwork v1.0 for php初步计划于2008年2月1日正式开源。

Jwork框架的特点:
1、和其它框架相比,Jwork框架不需配置,不改变原有开发习惯。
2、Jwork框架是开发的经验集,集成了软件中开发中常用的API。
3、Jwork框架集成了Jpage分页,AJAX,HTML编辑器等。
4、充分提高开发效率,便于小组开发、协同开发。


Jwork v1.0 for php
jwork v1.0 for php是用于php开发的一个框架集。现将其功能简介如下:

1、集成Jpage,最优化的分页方案。
Jpage解决了海量和普通查询的需求,优化了软件结构,一句sql即可分页,为互联网上现有的最佳分页解决方案。

2、集成数据层DAO,最简单的数据操作。
一般而言,开发必要操作数据库。开发php就意味着要对mysql操作。出于此,Jwork框架v1.0集成了对mysql操作的封装。
对于插入数据,不需要写sql语句,只需指定列名,控件名即可。
对于修改数据,可实现表单自动回填,不需去给控件赋值。

3、集成了ajax框架,一句话即可实现ajax。
随着web2.0的发展,ajax的应用越来越广,jwork框架采用最原始、清晰的ajax实现,即简单方便的实现了ajax,又让ajax的各过程清晰可见。

4、集成众多研发者的多年开发经验。
jwork框架的一些工具类,时间类、上传类、邮箱类等API,集成了众多研发者的Java、.NET、PHP、ASP的web开发经验,你在开发中常遇到需求实现,在jwork框架中均有收录。

5、集成了开发中常用的JS和PHP验证方法,如email格式、手机格式、身份证格式的验证。
时间就是金钱,提供开发效率,不但可以让你收获财富,更可以让你轻松应对开发工作。



Jwork部分演示:


添加、修改演示:

function Add()
{
 $data = new MysqlDao(); 
 $filed="code_name,code_lang,user_id,

 

因为php4早就end了,所以是有必要切换到php5的了,所以有时调试需要整合一下了

做了一个脚本,让他们批处理一下就能自动切换了,方便的说

环境:

window XP SP2 +apache2.2.6 + PHP4.4.7 +PHP5.2.5

PHP4目录:E:webphp4

PHP5目录:E:webphp5

APACHE目录:E:webApache2.2

 

1.需要两个apache的httpd.conf文件,,因为apache2.2.6对php4.47支持不好,所以要另外加插件了.(参考:http://pakapaka.jp/softwareinfo/146.html)

php4的为: httpd_php4.conf

PHP5为:httpd_php5.conf

2. 准备两个批处理文件就可以了

变成php4:

 



copy php.ini c:windows
copy php4ts.dll c:windows
copy php4ts.lib c:windows
copy E:webApache2.2confhttpd_php4.conf E:webApache2.2confhttpd.conf

net stop apache2.2
net start apache2.2

 

 

变成php5

 



del  c:windowsphp.ini
del c:windowsphp4ts.dll 
del  c:windowsphp4ts.lib

copy E:webApache2.2confhttpd_php5.conf E:webApache2.2confhttpd.conf

net stop apache2.2
net start apache2.2

 

 

当然以上目录都是放在php4根目录下的,你只要根据目录修改就可以了



[!--infotagslink--]

相关文章

  • phpems SQL注入(cookies)分析研究

    PHPEMS(PHP Exam Management System)在线模拟考试系统基于PHP+Mysql开发,主要用于搭建模拟考试平台,支持多种题型和展现方式,是国内首款支持题冒题和自动评分与教师评分相...2016-11-25
  • ASP/PHP sql注入语句整理大全

    SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作 标准注入语句1.判...2016-11-25
  • PHP防止SQL注入的例子

    防止SQL注入是我们程序开发人员必须要做的事情了,今天我们就来看一篇关于PHP防止SQL注入的例子了,具体的实现防过滤语句可以参考下面来看看吧。 使用prepared以及参...2016-11-25
  • PHP中自带函数过滤sql注入代码分析

    SQL注入攻击是黑客攻击网站最常用的手段。如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击。SQL注入攻击通常通过给站点数据库提交不良的数据或...2016-11-25
  • AngularJS 依赖注入详解及示例代码

    本文主要介绍AngularJS 依赖注入的知识,这里整理了相关的基础知识,并附示例代码和实现效果图,有兴趣的小伙伴可以参考下...2016-08-24
  • 一篇文章带你了解kali局域网攻击

    这篇文章主要给大家介绍了kali的局域网攻击,小编觉得这篇文章还是不错的,使用起来也是非常方便的,需要的朋友可以参考下...2021-08-20
  • php预防XSS攻击的一些方法整理

    现在有很多php开发框架都提供关于防XSS攻击的过滤方法,下面和大家分享一个预防XSS攻击和ajax跨域攻击的函数,摘自某开发框架,相比于仅仅使用内置函数应该还是够强了的吧...2016-11-25
  • Spring boot 无法注入service问题

    这篇文章主要介绍了Spring boot 无法注入service问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-09
  • Spring 配置文件字段注入到List、Map

    这篇文章主要介绍了Spring 配置文件字段注入到List、Map,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-19
  • php sql防注入以及 html 过滤安全函数

    方法一过滤html自定义函数 代码如下 复制代码 function ihtmlspecialchars($string) { if(is_array($string)) { foreach($string as $key =>...2016-11-25
  • sql安全之SQL注入漏洞拖库原理解析

    本文章以自己的一些经验来告诉你黑客朋友们会怎么利用你数据库的sql漏洞来把你的数据库下载哦,有需要的同这参考一下本文章。 在数据库中建立一张表: 代码...2016-11-25
  • Nginx防止流量攻击的配置详解

    这篇文章主要给大家分享了Nginx防止流量攻击的配置方法,文中给出了详细的介绍和配置示例代码,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。...2017-07-06
  • IIS 服务器 防范攻击3条安全设置技巧

    你的网站是不是常常被黑,或者一不注意就成了黑客的“肉鸡”?对于Web网站服务器来说,如果不进行安全设置,很容易被黑客“盯上”,随时都有被入侵的危险。...2016-01-27
  • .Net防sql注入的几种方法

    这篇文章主要给大家总结介绍了关于.Net防sql注入的几种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用.Net具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2021-09-22
  • ASP.NET防止SQL注入的方法示例

    这篇文章主要介绍了ASP.NET防止SQL注入的方法,结合具体实例形式分析了asp.net基于字符串过滤实现防止SQL注入的相关操作技巧,需要的朋友可以参考下...2021-09-22
  • SpringBoot属性注入的多种方式实例

    在 SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入,下面这篇文章主要给大家介绍了关于SpringBoot属性注入的多种方式,需要的朋友可以参考下...2021-10-30
  • spring中向一个单例bean中注入非单例bean的方法详解

    Spring是先将Bean对象实例化之后,再设置对象属性,所以会先调用他的无参构造函数实例化,每个对象存在一个map中,当遇到依赖,就去map中调用对应的单例对象,这篇文章主要给大家介绍了关于spring中向一个单例bean中注入非单例bean的相关资料,需要的朋友可以参考下...2021-07-19
  • .NET Core源码解析配置文件及依赖注入

    这篇文章我们设计了一些复杂的概念,因为要对ASP.NET Core的启动及运行原理、配置文件的加载过程进行分析,依赖注入,控制反转等概念的讲解等...2021-09-22
  • ASP.NET Core中如何利用Csp标头对抗Xss攻击

    这篇文章主要给大家介绍了关于ASP.NET Core中如何利用Csp标头对抗Xss攻击的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2021-09-22
  • ASP.NET Core依赖注入系列教程之控制反转(IoC)

    这篇文章主要给大家介绍了关于ASP.NET Core依赖注入系列教程之控制反转(IoC)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22