看好你的门-保护数据存储区(1)-SQL注入防御

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。

1、常用的SQL注入防御的方法

一个能连接数据库的应用。

1.对用户端输入的数据进行严格防范;

2.使用PreparedStatement执行Sql语句;

3.不仅仅要在页面层面进行验证,在服务端层面还要同步进行这些验证;

2、使用正则表达式屏蔽特殊字符

使用SQL注入攻击多在特殊字符上下手脚,如“’”,“*”,“/” ,”–”等,如果用正则表达式限制特殊字符输入,这些手段将没有效果。下面的代码将阻止含有特殊字符的请求。

if(Pattern.matches(“\w+”, name)==false || Pattern.matches(“\w+”, pswd)==false ){

// 返回login界面

request.setAttribute(“feedbackMsg”, “用户名和密码不允许包括特殊字符”);

RequestDispatcher dispatcher = request.getRequestDispatcher(“/web/page/login1.jsp?curr=0”);

dispatcher.forward(request, response);

return;

}

3、使用PreparedStatement代替Statement

SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement执行SQL语句,其后只是输入参数, SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。示例代码如下:

Connection conn=null;

PreparedStatement ps=null;

ResultSet rs=null;

String sql=” select count(*) from usertable where name=? and password=? “;

ps=conn.prepareStatement(sql);

ps.setString(1, name);

ps.setString(2, password);

PreparedStatement的错误使用

用PreparedStatement来防范SQL注入攻击是因为“因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构”,如果如下使用则起不到这个效果,因为SQL语句和参数没有分开,它们被组合在一起被一次性提交了。

时间: 2024-08-08 03:09:13

看好你的门-保护数据存储区(1)-SQL注入防御的相关文章

看好你的门-攻击数据存储区(5)-LDAP注入攻击

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 本文部分内容来自互联网和翻译 1.一些多余的话 LDAP注入和SQL注入,原理上非常相似 但是LDAP往往包含很多的数据,相对来说,危害性更加大. 2.一些案例 这些案例不一定是LDAP造成的,但是性质基本上差不多 WooYun: 腾讯某服务配置不当内部海量敏感信息泄露! http://www.wooyun.org/bugs/wooyun-2013-045626 WooYun: 腾讯某研发中

看好你的门-保护数据存储区(2)-查看PreparedStatement最终执行的SQL

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.前提 很多同学都希望PreparedStatement 打印出最终执行的SQL,可能用于学习,也可能用于系统维护,也有可能用于其他的目标: 我也有这个想法和需求,但是经过多次实践和尝试,我发现在我的能力范围,我是无法实现的. 于是我找到了一个工具,log4jdbc ,这个工具能够切入JDBC层,对实际SQL执行前,把SQL抽出来. 这个工具相当强大,不过最终的运行结果会超出你的设想--.

看好你的门-攻击数据存储区(4)-XPath注入攻击

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.一些多余的话 XPath注入和SQL注入,原理上非常相似 但是XPath注入的对象主要是XML,相对来说,危害性更加大 2.保存用户信息的XML <?xml version="1.0" encoding="utf-8" ?> <root> <user> <id>1</id> <username

选定的数据存储区出现问题,原因可能是服务器名称或凭据无效,或者权限不足

问题: ASP.NET Configuration site->安全,报错 "选定的数据存储区出现问题,原因可能是服务器名称或凭据无效,或者权限不足" 解决: 打开文件C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config 找到 <connectionStrings> <add name="LocalSqlServer" connectionString=&quo

看好你的门-攻击服务端(4)-HTTP参数注入攻击

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.HTTP参数注入攻击 如果用户提交的参数,被用做后端HTTP请求中的参数,这个时候就有可能会导致HTTP参数注入. 一个自己想出来的烂比方: 一个P2P的转账系统:钱(money),从哪里(from)到哪里去(to). 一个很简单的系统.开发的时候为了复用代码,加了一个判断字符(check),当然,这个判断字符(check)是不会出现在这个P2P的转账系统的文档系统中: 2.一个典型的容

【JDK源码分析】String的存储区与不可变性(转)

// ... literals are interned by the compiler // and thus refer to the same object String s1 = "abcd"; String s2 = "abcd"; s1 == s2; // --> true // ... These two have the same value // but they are not the same object String s1 = new

单片机中C语言的程序与数据存储

单片机中C语言的程序与数据存储 一.五大内存分区: 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等. 2.堆区(heap):就是那些由new分配的内存块,它们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收. 3.自由存储区:就是那些

IOS数据存储常用的5种方式

iOS中的数据存储(上) iOS应用数据存储的常用方式: 应用沙盒: 应用沙盒结构分析 Documents: temp: Library/Caches: Library/Preference: 沙盒根路径: 属性列表 偏好设置(Preference) NSKeyedArchiver NSData iOS中的数据存储(上) iOS应用数据存储的常用方式: 1> XML属性列表(plist)归档. 2> Preference(偏好设置). 3> NSKeyedArchiver归档. 4>

iOS开发之数据存储之SQLite3(包括FMDB)

1.概述 SQLite3是一款开源的嵌入式关系型数据库,可移植性好.易使用.内存开销小. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中.比如下列的创表语句是合法的: create table t_person(name, age); 为了保证可读性,建议还是把字段类型加上: create table t_person(name text, age integer); SQLite将数据划分为以下几种存储类型: integer : 整型值 real : 浮点值 te