SQL注入与Java

前面这篇文章介绍了SQL注入,并且主要就PHP的内容做了实验:

http://www.cnblogs.com/charlesblc/p/5987951.html

还有这篇文章对处理方案做了介绍(PreparedStatement in PDO or mysqli)

http://www.cnblogs.com/charlesblc/p/5988919.html

那么对于Java是怎样的情况呢?

首先,尽量避免sql拼接,并且参数加引号。使用正则过滤,前端过滤。使用字符串转换,转义处理。

最终,尽量采用预编译语句集 PreparedStatement。

分析得出,PreparedStatement相比Statement基本解决了SQL注入问题,而且效率也有一定提升。

PreparedStatement对参数都做了转义,不允许引号的直接传递;

不允许传参过程中改变sql的逻辑结构,不允许在不同的插入时间改变查询的逻辑结构;

使用PreparedStatement提供的传参接口setXXX,在类型有误时会直接报错。

基本SQL注入就被过滤了(用基本,是因为现在也预测不到后面攻击技术是否有突破或者新的漏洞发现)。

另外,WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数。

Java连接数据库基本使用Mybatis(之前也用Hibernate)。裸JDBC调用,基本很少用了。所以就不实验了。

时间: 2024-10-03 18:08:24

SQL注入与Java的相关文章

Java代码审计连载之—SQL注入

前言近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很DT.想当初入门代码审计的时候真是非常难,网上几乎找不到什么java审计的资料,摸索了很长时间,搜到的也仅仅讲了点原理,为了给想学java代码审计的朋友门一点入门资料,就开始写<java代码审计连载>系列文章,本文章适合初学者,大牛留下脚印后请绕过,若代码有什么其他问题请忽略,因为那不是重点,此片只讲述SQL注入.本次写了两个简单的页面,一个登陆页面,一个查询id

mysql绑定参数bind_param原理以及防SQL注入

假设我们的用户表中存在一行.用户名字段为username.值为aaa.密码字段为pwd.值为pwd.. 下面我们来模拟一个用户登录的过程.. <?php $username = "aaa"; $pwd = "pwd"; $sql = "SELECT * FROM table WHERE username = '{$username}' AND pwd = '{$pwd}'"; echo $sql; //输出 SELECT * FROM ta

Java JDBC概要总结一(基本操作和SQL注入问题)

JDBC定义: JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API.JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成. JDBC规范(掌握四个核心对象): DriverManager类:用于注册驱动(管理控制驱动程序) Connection: 表示与数据库创建的连接 Statement: 操作数据库sql语句的对象 ResultSet: 结果集或一张虚

Java防止SQL注入2(通过filter过滤器功能进行拦截)

首先说明一点,这个过滤器拦截其实是不靠谱的,比如说我的一篇文章是介绍sql注入的,或者评论的内容是有关sql的,那会过滤掉:且如果每个页面都经过这个过滤器,那么效率也是非常低的. 如果是要SQL注入拦截,可以在数据访问上层的业务层用方法的形式进行手动过滤还靠谱些. 或者使用SQL的参数形式进行,这个绝对是百分百搞得定. 关于SQL注入解释,参考:http://www.cnblogs.com/EasonJim/p/6223216.html 关于filter过滤器使用教程,参考:http://www

java程序中sql注入分析及优化方案

先来看看百度百科的解释: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到sql注入攻击. 1.java程序

java 防止sql注入的方法(非原创)

一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体思路 1.寻找到SQL注入的位置 2.判断服务器类型和后台数据库类型 3.针对不通的服务器和数据库特点进行SQL注入攻击 三.SQL注入攻击实例 比如在一个登录界面,要求输入用户名和密码: 可以这样输入实现免帐号登录: 用户名: ‘or 1 = 1 – 密 码: 点登陆,如若没有做特殊处理,那么这个

java中预处理PrepareStatement为什么能起到防止SQL注入的作用??!!

大家都知道,java中JDBC中,有个预处理功能,这个功能一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入. 用法就是如下边所示: String sql="update cz_zj_directpayment dp"+ "set dp.projectid = ? where dp.payid= ?"; try { PreparedStatement pset_f = conn.prepare

防止sql注入方法 如何防止java中将MySQL的数据库验证密码加上 &#39; or &#39;1&#39;= &#39;1 就可以出现万能密码 的PreparedStatement

package com.swift; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class LoginJDBC$PreparedStatement { public static void main(String[] args

Java防止SQL注入

http://blog.csdn.net/abc19900828/article/details/39501349 SQL 注入简介:        SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 比如在一个登陆界面,要求用户输入用户名和密码: 用户名:     ' or 1=1 -- 密     码: 点登陆,如若没有做特殊处理,而只是一条带条件的查询语句如: Stri