`
xieye
  • 浏览: 799434 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

php基础知识(2)-sql注入

    博客分类:
  • PHP
 
阅读更多
php基础知识-sql注入

示例代码下载页http://xieye.iteye.com/blog/1336095(在附件)

sql注入是指:黑客利用编写不严谨的php程序中的漏洞,进行数据窃取或数据破坏的行为。

如果没有test库,首先建立test数据库。

然后,建一个用户表
use test;


-- 创建用户表
CREATE TABLE member (
  id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  username varchar(255) NOT NULL DEFAULT '' COMMENT '用户名',
  password varchar(255) NOT NULL DEFAULT '' COMMENT '密码',
  primary KEY (id )
)default charset=utf8 COMMENT='会员表';

-- 往会员表插入两条数据。
insert into member(username,password)values('name1', 'name1');
insert into member(username,password)values('name2', 'name2');

-- 检查表
show tables;

可以写个简单的程序来测试数据库的正确性。

代码说明:
文件夹是sql_injection
3.php是列出所有用户,同时也是一个公共文件,被别的文件调用。
4.php是测试sql注入,程序编写错误的例子
5.php是测试sql注入,程序防止注入、编写正确的例子。

演示:
首先列出所有用户的程序:
http://localhost/command/peixun/sql_injection/3.php

一个错误的导致sql注入的程序(首先确保magic_quotes_gpc = 0)
http://localhost/command/peixun/sql_injection/4.php
首先在用户名输入admin,密码输入1,发现是正确的。
再次注册,在用户名输入
5', 'f'); delete from member; -- \
密码输入1

点击注册。
发现提示一堆致命错误,这时开新窗口,重新输入
http://localhost/command/peixun/sql_injection/3.php

发现刚才注册的用户数据没有了,说明被注入了delete语句。

光防止delete是不够的,重要的是确保每个字符串里面都被转义过,很多php框架都实现了此功能,当然必须要调用才可以。

一个正确的的防止sql注入的程序
http://localhost/command/peixun/sql_injection/5.php

看代码可知,代码使用了zend的防止注入的功能,不会遭受注入了,在zend框架中,更多防注入使用的是?参数,请自行阅读zend文档。

另外,其实把php.ini中的magic_quotes_gpc打开也可以防注入,但是付作用太多,所以一般不用。

代码可下载。
3.php
<?php
//测试sql注入的公共文件
require_once('../Public/CommandLine.php');

$db = Sys::getdb();

$sql ="select * from test.member";
$result = $db->fetchAll($sql);

$html ="
<h2>当前所有用户的列表</h2>
<ul>";
foreach ($result as $value) {
    $html .= "<li>{$value['username']}</li>";
    
}
$html .= '</ul>';

$html .= "<br /><a href=\"4.php\">注册用户</a>";

echo $html;



4.php
<?php
//测试sql注入:错误的例子
require_once('../Public/CommandLine.php');


$isget = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 1 : 0;
if ($isget) {
    $html = <<<longs
<html>    
<body>
  <h3>注册用户页面</h3>
  <form method="post">
    请输入用户名:<input type="text" name="username" value=''>
    请输入密码:  <input type="text" name="password" value=''>
    <input type="submit" value="注册">
  </form>
  
  
</body>  
</html>  
longs;
    echo $html;
    
} else {
    //危险的例子,会导致sql注入
    $db = Sys::getdb();
    
    $sql = "insert into member(username, password)values('" . $_POST['username'] . 
           "', '" . md5($_POST['password']) . "')";
   echo $sql;
    $db->query($sql);
}

//无论如何,最后显示所有的用户
include('3.php');


5.php
<?php
//测试sql注入,正确的例子
require_once('../Public/CommandLine.php');


$isget = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 1 : 0;
if ($isget) {
    $html = <<<longs
<html>    
<body>
  <h3>注册用户页面(修改版)</h3>
  <form method="post">
    请输入用户名:<input type="text" name="username" value=''>
    请输入密码:  <input type="text" name="password" value=''>
    <input type="submit" value="注册">
  </form>
  
  
</body>  
</html>  
longs;
    echo $html;
    
} else {
    //正确的例子, 不会导致sql注入
    $db = Sys::getdb();
    $sql = "insert into test.member(username, password)values('" . $_POST['username'] . 
           "', '" . md5($_POST['password']) . "')";
  
    $db->insert("test.member", array(
        'username'=> $_POST['username'] ,
        'password' => $_POST['password'],
    ));
    
    
//    echo $_POST['name1'];
    
}

//无论如何,最后显示所有的用户
include('3.php');



分享到:
评论

相关推荐

    精品分享-CTF比赛培训视频及往年题库解析合集(50份).zip

    CTF-第一周:Linux系统安全、Windows系统安全、HTTP协议分析、PHP基础知识 CTF-第二周:CTF杂项 CTF-第三周:信息泄露、sql注入、文件上传、常见CTF web题型及解析技巧 CTF-第四周:重点漏洞分析、金融安全案例剖析...

    CTF Web各种题目的解题姿势

    课时4:Linux基础知识21'37 课时5:Redis未授权访问漏洞利用与防御16'17 课时6:Redis未授权添加ssh密钥f17'04 第5章 第五章 课时1:XXE-XML基础必备24'47 课时2:XXEXML盲注利用技巧18'22 第6章 第六章 课时1...

    php网络开发完全手册

    第13章 关系型数据库的基础知识 204 13.1 关系型数据库与关系型数据库系统的 13.1 介绍 204 13.2 关系型数据库系统的结构与运行过程 205 13.2.1 关系型数据库系统的层次结构 205 13.2.2 关系型数据库系统的运行过程 ...

    关于PHP安全编程的使用技巧

    介绍关于PHP安全编程的相关知识: 包括SQL注入、表单与URL安全、验证与授权、会话与cookie、文件及命令等~

    1.初探安全.pptx

    2.SQL注入 00:42:41 3.XSS 01:05:58 4.CSRF 00:21:27 5.暴力破解 00:32:11 6.文件上传 00:22:40 7.逻辑漏洞 00:07:47 【六、漏洞扫描工具】 1.NMAP 00:35:40 2.SQLMAP 00:24:44 3.AWVS 00:16:05 4.Xray 00:20:08...

    Web安全深度剖析(张柄帅)

    全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并着重分析了“拖库”事件时黑客所使用的攻击手段。此外,还介绍了渗透测试工程师其他的一些...

    PHP和MySQL Web开发第4版pdf以及源码

    4.6.1 基础知识 4.6.2 字符集和类 4.6.3 重复 4.6.4 子表达式 4.6.5 子表达式计数 4.6.6 定位到字符串的开始或末尾 4.6.7 分支 4.6.8 匹配特殊字符 4.6.9 特殊字符一览 4.6.10 在智能表单中应用 4.7 用...

    PHP和MySQL WEB开发(第4版)

    4.6.1 基础知识 4.6.2 字符集和类 4.6.3 重复 4.6.4 子表达式 4.6.5 子表达式计数 4.6.6 定位到字符串的开始或末尾 4.6.7 分支 4.6.8 匹配特殊字符 4.6.9 特殊字符一览 4.6.10 在智能表单中应用 4.7 用正则表达式...

    网络安全培训方案(2).docx

    9)、深入了解各类SQL注入漏洞的原理、攻击手段及加固措施 10)、掌握上传漏洞、命令执行漏洞、XSS漏洞等常见Web漏洞的利用方式及技巧 11)、掌握各类提权方法 12)、掌握各类第三方插件/程度的漏洞利用方法 考试及...

    PHP和MySQL Web开发第4版

    4.6.1 基础知识 4.6.2 字符集和类 4.6.3 重复 4.6.4 子表达式 4.6.5 子表达式计数 4.6.6 定位到字符串的开始或末尾 4.6.7 分支 4.6.8 匹配特殊字符 4.6.9 特殊字符一览 4.6.10 在智能表单中应用 4.7 用...

    计算机病毒与防护:WEB渗透基本思路.ppt

    基础的渗透测试案例 分析扫描报告得到该网站存在SQL注入漏洞。 基础的渗透测试案例 使用SQLMAP获取到网站后台登陆账号密码。 基础的渗透测试案例 使用SQLMAP获取到网站后台登陆账号密码。 基础的渗透测试案例 关于...

    MiscSecNotes:有关Web应用程序安全性,渗透测试的一些学习笔记

    MiscSecNotes 此系列文章是本人关于学习 Web/...SQL 注入 MYSQL注入 sqlmap tips sqlmap 进阶 Flash安全 Flash xss Flash csrf PHP安全 php filter php open_basedir php 安全编码 php 弱类型问题 php 高级代码审计 php

    网络安全培训方案.docx

    9)、深入了解各类SQL注入漏洞的原理、攻击手段及加固措施 10)、掌握上传漏洞、命令执行漏洞、*SS漏洞等常见Web漏洞的利用方式及技巧 11)、掌握各类提权方法 12)、掌握各类第三方插件/程度的漏洞利用方法 考试及...

    [完整][中文][WEB安全测试].(美)霍普.扫描版.pdf

     本书中的秘诀所覆盖的基础知识包括了从观察客户端和服务器之间的消息到使用脚本完成登录并执行Web应用功能的多阶段测试。在本书的最后,你将能够建立精确定位到Ajax函数的测试,以及适用于常见怀疑对象(跨站式脚本...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    ADO.Net(行集、数据集、类型化数据集、SQLHelper、SQL注入漏洞防范、数据绑定)。 3、三层架构MIS项目(5天) 查看项目演示 功能点 本项目基于流行的三层架构(DAL+BLL+UI)。 主要功能点:高安全性的用户管理体系...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

Global site tag (gtag.js) - Google Analytics