热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sql注入以及防范

登陆验证注入:万能用户名失效万能密码xxor11万能用户名xxxunionselect*fromusers*$sqlselect*fromuserswhereusername$u

登陆验证注入:

//万能用户名失效

//万能密码 xx' or 1='1

//万能用户名 xxx' union select * from users/* 

$sql="select * from users where username='$username' and password='$password'";

 

//万能密码 33 union select * from users

//万能用户名 89 union select * from users;/* 

$sql="select * from users where username=$username and password=$password";//$username不加‘’,只能表示数字,否则sql语句有错,这种写法不可以使用

 

/*

* 防范:

* 1:服务器配置  设置php.ini的magic_quotes_gpc为on

* 2:密码比对

* 3:pdo  php.ini   php_pdo_XXSQL.dll

* 4:入侵检测系统IDS

* */

 

密码比对防止注入

$sql="select password from users where username='$username'";

$res=mysql_query($sql,$conn);

 

if($row=mysql_fetch_array($res)){

if($row[0]==$password){

header("Location:ManageUser.php");

}else{

echo "密码有误";//改成用户名或密码有误

}

}else{

echo "error,返回";

}

 

 

pdo防范

 

$sql="select * from users where username=? and password=?";

//创建pdo对象

$myPdo= new PDO("mysql:host=localhost;port=3306;dbname=spdb","root","root");

 

//设置编码

$myPdo->exec("set names utf8");

 

//预处理

$pdoStatement=$myPdo->prepare($sql);

 

//填入用户名和密码

$pdoStatement->execute(array($username,$password));

 

//取出结果

$res=$pdoStatement->fetch();

 

if(empty($res)){

echo "error,返回";

}else{

     header("Location:ManageUser.php");

}

 

防止查询(搜索)注入:

//对关键字进行过滤

$keyWord=addslashes($keyWord);

$keyWord=str_replace("%","\%",$keyWord);

$keyWord=Str_replace("_","\_",$keyWord);

 

$sql="select * from users where username like '%$keyWord%'";

 

if(!empty($keyWord)){

    $res=mysql_query($sql,$conn) or die("不能完成查询".mysql_error());

$flag=0;

while($row=mysql_fetch_array($res)){

$flag=1;

echo "
$row[0]   $row[1]";

}

if($flag==0){

echo "你的关键词有误";

}

}else{

echo "请输入";

}

 

插入insert注入

其中的grade代表用户的等级,1是普通用户,2是普通管理员,3是

超级管理员,我们在注册一个用户的时候,默认是普通用户:sql语句:

INSERT INTO `users` (username, password, email, job,sal,grade) VALUES ( '$username', '$password', '$email',’$job’,’$sal’ '1');

 

填入的值 34‘, ’3’)/*   对应的sql语句就是:

INSERT INTO `users` (username, password, email, job,sal,grade) VALUES ( ‘xiaoming’, ‘xiaoming’, ‘xiaoming@sohu.com’,’工程师’,’34’,’3’)/*, '1');

这样就注册成为超级管理员了。但这种利用方法也有一定的局限性,比如,我没有需要改写的变量如grade字段是数据库的第一个字段,前面没有地方给我们注入,我们也没有办法了。

 

 

数据过滤:在接收字符串时把单引号之类的字符给过滤掉

当程序员不容易啊,真希望有个程序员鼓励师来鼓励一下,O(∩_∩)O哈哈~

转:https://www.cnblogs.com/jinshiyill/p/4872251.html



推荐阅读
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 以管理员身份打开命令行粘贴上面 ... [详细]
  • 使用这个技巧要达到的目标:一般来说,模型和控制器你都不会有相同的类名字。让我先创建一个取名为post的model。classPostextendsModel{}现在 ... [详细]
  • 微信商户扫码支付 java开发 [从零开发]
    这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。相关链接:微信支 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
  • 一、新建登录名1.在登录名右侧的文本框中输入新建的管理员账号名称;2.一对单选按钮组中,选择SqlServer身份验证,并输入登录密码;3.勾选强制实施密码策略复选框;(密码策略一 ... [详细]
author-avatar
手机用户2502923227
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有