在写登录注册的时候发现了SQL和JS注入这个危害网站的用户举动:

测试方法:

SQL注入:

 先来做一个测试:
用户名:’ or 1 #
密码:随便写8位以上
验证码:写正确

好吧,就那么简单就进去了:

概念

如果用户在填写表单或者其他数据的时候,通过一些特殊的数据形式,对SQL的行为作出了非法的影响,就叫作SQL注入!

基本原理

正常执行的sql语句:

 select * from bg_admin where admin_name='zhouyang' and admin_pass=md5('')

不正常执行的sql语句:

 select * from bg_admin where admin_name='' or 1 #' and admin_pass=md5('123654uiykgjfhdsav')

拆分分析:

由于#在sql语句中是注释符,所以,上面的SQL语句真正执行的是:

 select * from bg_admin where admin_name='' or 1

很显然,上面执行的结果就是where后面的条件永远为真!其实就相当于:

 select * from bg_admin

也就是说,只要bg_admin表中有正常的管理用户,就可以查询到数据!

其实,在这里可以进行sql注入的“用户名”还有很多,比如:

‘ or 1 or ‘

 select * from bg_admin where admin_name='' or 1 or '' and admin_pass=md5('ewsdfgbnvb')

特别强调:

1,  不仅仅是在用户登录的时候,SQL语句可以被注入,其他任何用户的数据只要参与执行,都有可能被注入!

2,  SQL注入的危害非常之大,有时候甚至可以删除服务器上的整个数据库:

比如:

用户名为:' or 1;drop database php2010;#

注意:

MySQL数据库默认的有information_schema,所有数据库的名称等信息都存放在里面,这些数据库很容易获取到默认数据库的名字!

解决方案

1,  在业务逻辑上预防,比如要求用户名只能由特定的字符组成(比如数字字母下划线)(使用正则表达式)

2,  使用PHP函数addslashes(最常用)

其中:

strip_tags(trim($data)是防止JS注入的!!
    /**
* 对用户的数据进行安全过滤
*/
protected function escapeData($data) {
return addslashes(strip_tags(trim($data)));
}

3,  使用MySQL提供的数据转义函数:mysql_real_escape_string($data, $link);不过有一个前提是必须连接上数据库之后才可以使用!

4,  使用预处理技术,因为预处理是强制将sql语句的结构和数据部分分开!

PHP:测试SQL注入以及防止SQL注入的更多相关文章

  1. 使用sqlmap注入DVWA的SQL Injection菜单

    1 使用sqlmap注入DVWA的SQL Injection菜单 本教程中的登陆地址:http://192.168.0.112/dvwa/login.php 1.1 获取cookie信息 1) 使用a ...

  2. 『SQL注入』 User-Agent 手工注入的探测与利用分析

    原理很简单:后台在接收UA时没有对UA做过滤,也没有PDO进行数据交互(实际PDO是非常有必要的),导致UA中有恶意代码,最终在数据库中执行. Bug 代码: 本地顺手打了一个环境,Bug 代码部分: ...

  3. 【sql注入】浅谈sql注入中的Post注入

    [sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...

  4. SQL Server的WAITFOR DELAY注入

    SQL Server的WAITFOR DELAY注入   WAITFOR是SQL Server中Transact-SQL提供的一个流程控制语句.它的作用就是等待特定时间,然后继续执行后续的语句.它包含 ...

  5. SQL注入之堆叠注入(堆查询注入)

    Stached injection -- 堆叠注入 0x00 堆叠注入的定义 ​ Stacked injection 汉语翻译过来后,称 为堆查询注入,也有称之为堆叠注入.堆叠注入为攻击者提供了很多的 ...

  6. sql注入之报错注入and boolean注入

    1.sql注入之报错注入 正常传参,返回页面正常: 加入'  返回页面报错,出现"zhangsan"' 报错注入使用的函数 在这里我们使用 select updatexml(1,c ...

  7. SQL中批量删除被注入的恶意代码的方法

    下文将为您介绍SQL中批量删除被注入的恶意代码的方法,供您参考,如果您也遇到了这样的问题,不妨一看,相信对您会有所帮助. 1,如果你的数据表很少的话,那么写几条简单的sql就搞定了 对于表中的nvch ...

  8. [SQL SERVER系列]读书笔记之SQL注入漏洞和SQL调优

    最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这个表达式永远返回 true, ...

  9. 读书笔记之SQL注入漏洞和SQL调优

    原文:读书笔记之SQL注入漏洞和SQL调优 最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“' ...

  10. SQL注入漏洞和SQL调优SQL注入漏洞和SQL调优

    SQL注入漏洞和SQL调优 最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这 ...

随机推荐

  1. RxJS 入门指引和初步应用

    作者:徐飞链接:https://zhuanlan.zhihu.com/p/25383159来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. RxJS是一个强大的React ...

  2. 用py3的nonlocal来打破局部变量间的作用域

    nonlocal:用于局部变量,找上层中离当前函数最近一层的局部变量,找到为止,如果在全局找到或找不到,报错. 使用场景:内层函数对外层数据修改/处理

  3. JUnit4中@Before、@After、@Test等注解的作用

    转载:https://blog.csdn.net/tn_java/article/details/53837024 JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的 ...

  4. 教你用webpack搭一个vue脚手架[超详细讲解和注释!](转载)

    1.适用人群 1.对webpack知识有一定了解但不熟悉的同学. 2.女同学!!!(233333....) 2.目的 在自己对webpack有进一步了解的同时,也希望能帮到一些刚接触webpack的同 ...

  5. 【noip】跟着洛谷刷noip题2

    noip好难呀. 上一个感觉有点长了,重开一个. 36.Vigenère 密码 粘个Openjudge上的代码 #include<cstdio> #include<iostream& ...

  6. UOJ#422. 【集训队作业2018】小Z的礼物

    #422. [集训队作业2018]小Z的礼物 min-max容斥 转化为每个集合最早被染色的期望时间 如果有x个选择可以染色,那么期望时间就是((n-1)*m+(m-1)*n))/x 但是x会变,中途 ...

  7. linux 下环境变量设置

    Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环境变量.系统环境变量对所有系统用户都有效,用户环境变量仅仅对当前的用户有效. 修改用户环境变量 用户环境变量通常被存储在下面的文件中: ...

  8. 【solr】Solr5.5.4单机部署

    Solr5.5.4单机部署 Solr5和Solr4有很大区别,最为明显的就是Solr5已经可以独立部署,从Solr5开始,Solr已经不再以war包形式部署,Solr已经成为了一个独立的java服务端 ...

  9. ES6中async和await说明和用法

    昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简洁,同时async/await 已经被标准化,是时候学习一下了. 先说一下async的用法,它作为一个 ...

  10. 【Codeforces Round #430 (Div. 2) B】Gleb And Pizza

    [链接]点击打开链接 [题意] 在这里写题意 [题解] 根据圆心到原点的距离这个东西判断一下圆在不在那个环里面就好 [错的次数] 0 [反思] 在这了写反思 [代码] #include <cst ...