❶ 如何防止SQL注入攻击之java网站安全部署
java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构,大部分的SQL注入已经挡住了,在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数 。下面就举三个例子来说明一下:
第一种:
采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可,如下所示:
String sql= "select * from users where username=? and password=?;PreparedStatement preState = conn.prepareStatement(sql);preState.setString(1, userName);preState.setString(2, password);ResultSet rs = preState.executeQuery();...
第二种:
采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入,如下所示:
public static String TransactSQLInjection(String str)
{
return str.replaceAll(".*([';]+|(--)+).*", " ");
}
userName=TransactSQLInjection(userName);
password=TransactSQLInjection(password);
String sql="select * from users where username='"+userName+"' and password='"+password+"' "
Statement sta = conn.createStatement();
ResultSet rs = sta.executeQuery(sql);
第三种:
使用Hibernate框架的SQL注入防范 Hibernate是目前使用最多的ORM框架,在Java Web开发中,很多时候不直接使用JDBC,而使用Hibernate来提高开发效率。
在Hibernate中,仍然不应该通过拼接HQL的方式,而应使用参数化的方式来防范SQL注入。有两种方式,一种仍然是使用JDBC一样的占位符“?”,但更好的方式是使用Hibernate的命名参数,例如检测用户名和密码是否正确,使用Hibernate可以写成如下:
String queryStr = “from user where username=:username ”+”password=:password”;
List result = session.createQuery(queryStr).setString("username", username).setString("password", password).list();
❷ 如何防止网站被SQL注入攻击之java网站安全部署
开发阶段: 使用预编译的sql 比如statement --> preparedStatement,使用orm框架时 setParameter(参数绑定,而不是在语句中直接拼接),或者通过servlet进行所有请求拦截过滤攻击字符
网站10大常见安全漏洞及解决方案
❸ 为什么java的安全性比较高
1、语言层次的安全性主要体现在:
Java取消了强大但又危险的指针,而代之以引用。由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的,因为原来这个内存地址可能存储着重要数据或者是其他程序运行所占用的,并且使用指针也容易数组越界。
垃圾回收机制:不需要程序员直接控制内存回收,由垃圾回收器在后台自动回收不再使用的内存。避免程序忘记及时回收,导致内存泄露。避免程序错误回收程序核心类库的内存,导致系统崩溃。
异常处理机制:Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。
强制类型转换:只有在满足强制转换规则的情况下才能强转成功。
底层的安全性可以从以下方面来说明
Java在字节码的传输过程中使用了公开密钥加密机制(PKC)。
2、在运行环境提供了四级安全性保障机制:
字节码校验器 -类装载器 -运行时内存布局 -文件访问限制
❹ 北大青鸟java培训:Web应用安全的措施
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站VIP会员密码泄露大多就是通过Web表单递交查询字符实现的,山西电脑培训http://www.kmbdqn.cn/发现这类表单特别容易受到SQL注入式攻击。
SQL注入攻击的原理本身非常简单,相关攻击工具容易下载,攻击者获得权限后有利可图。
这使得它成为有效的、攻击者常采用的Web入侵手段,是众多网站成为恶意代码传播平台的起因之一。
针对这一攻击手段认为,根本的措施是对Web应用的用户输入进行过滤。
并针对Web应用的基本特性,对Web应用的整体安工作采取以下具体措施:1、Web应用安全评估:结合应用的开发周期,通过安扫描、人工检查、渗透测试、代码审计、架构分析等方法,面发现Web应用本身的脆弱性及系统架构导致的安问题。
应用程序的安问题可能是软件生命周期的各个阶段产生的,其各个阶段可能会影响系统安的要点主要有:2、Web应用安加固:对应用代码及其中间件、数据库、操作系统进行加固,并改善其应用部署的合理性。
从补丁、管理接口、账号权限、文件权限、通信加密、日志审核等方面对应用支持环境和应用模块间部署方式划分的安性进行增强。
3、对外部威胁的过滤:通过部署Web防火墙、IPS等设备,监控并过滤恶意的外部访问,并对恶意访问进行统计记录,作为安工作决策及处置的依据。
4、Web安全状态检测:持续地检测被保护应用页面的当前状态,判断页面是否被攻击者加入恶意代码。
同时通过检测Web访问日志及Web程序的存放目录,检测是否存在文件篡改及是否被加入WebShell一类的网页后门。
5、事件应急响应:提前做好发生几率较大的安事件的预案及演练工作,力争以高效、合理的方式申报并处置安事件,并整理总结。
6、安全知识培训:让开发和运维人员了解并掌握相关知识,在系统的建设阶段和运维阶段同步考虑安问题,在应用发布前更大程度地减少脆弱点。
❺ 如何安全检测Java Web应用网站漏洞
如何安全检测Java Web应用网站漏洞.txt32因为爱心,流浪的人们才能重返家园;因为爱心,疲惫的灵魂才能活力如初。渴望爱心,如同星光渴望彼此辉映;渴望爱心,如同世纪之歌渴望永远被唱下去。web开发应用程序(网站),是目前应用最广泛的程序。但是开发者的水平参差不齐,导致了各种各样web漏洞的出现。本文站在分层架构的角度,分析一下如何在java web程序中找到可能出现的种种漏洞。 本文讨论的只是web程序上的漏洞,和其它漏洞,是相对独立的。这句话看似废话,实际上却说明了时常被忽略的因素,即:“很多人认为只要我开发web程序没有漏洞,web服务器就安全了”,事实上,并非如此。一个合格的web程序开发人员,应该时刻清楚自己开发的程序会在什么环境中被使用,以及一旦自己的程序产生某种漏洞,最终会导致什么后果。简单的说,web程序被安装在一台或多台(分布式)web服务器上,一旦安装成功,就等于在为广大用户提供服务的同时,给入侵者打开了一条或N条新的思路。如果服务器管理员刚好对安全配置不了解(事实上,国内这种管理员居多),那么只好由我们的程序来守好最后的关卡最后一道防线。 看了本文题目,一定有一部分人会认为,“不就是讲JSP漏洞么,用得着披着这么厚的包装么?”,为了回答这个疑问,我们先看看JSP和ASP的开发有什么不同吧。在ASP时代(ASP,PHP等语言),开发一套系统往往比修改别人已经写好的系统痛苦的多,因为它们把所有的代码(包括链接数据库的代码、执行SQL语句的代码、控制页面显示的代码)统统都放在<%......%>中,我们时常会看到如下代码块: -----------代码来自某ASP SHELL----------- Function GetFileSize(size) Dim FileSize FileSize=size / 1024 FileSize=FormatNumber(FileSize,2) If FileSize < 1024 and FileSize > 1 then GetFileSize="<font color=red>"& FileSize & "</font>KB" ElseIf FileSize >1024 then GetFileSize="<font color=red>"& FormatNumber(FileSize / 1024,2) & "</font>MB" Else GetFileSize="<font color=red>"& Size & "</font>Bytes" End If End Function ---------------------------------------- 如果客户的需求变了,要求页面不能使用“<font color=red>”等标签,全部应用“CSS”显示。挂了,把程序员召唤出来,一个一个的改吧。。。注意,这里强调下,特指“召唤程序员”才能改,如果是学美工的,只会HTML、JS、CSS,完了,这活还干不成。而这些只是简单的页面修改,如果客户今天说,MYSQL服务器承担不了这个数据量,要挂Oracle,可怜的程序员就要在一片一片的代码海洋里寻找执行SQL语句的代码,而每一个文件都可能存放着SQL语句,意味着每一个文件都可能在受SQL注入的威胁。
而JSP采用MVC模式分层架构进行开发,就可以把所有的文件分开,根据其用途,分别放在不同的文件夹下(分层),每个文件夹下的文件只负责自己的事情。例如数据访问层的代码就放在数据访问层的文件夹下,业务逻辑层的代码也都放在自己的文件夹下,当显示层(这一层是为了把最终的运算结果显示给用户看)的需求发生变化,就像前面的客户需求,我们只要修改这一层的文件就是了,其他层的代码根本不需要动,而修改者也不需要懂得其它层的代码。 代码分层了,意味着漏洞也在跟着分层,我们寻找JSP漏洞的思路也要跟着分层,才能与时俱进。 下面在讲述寻找漏洞的过程中,本文就拿一个简单的分层架构例子来做样板。样板程序的名称为“XX文章系统”,系统使用了STRUTS框架,和安全有关的层分为: “DB层”,这一层存放了链接数据库的字符串,以及JdbcTemplate类,直接访问数据库。因为在java中,执行SQL语句的函数按照返回值可以分为三类,所以在这一层定义了JDBC模版类(JdbcTemplate),每一次使用操作数据库时都要执行这一层的三个方法其中一个。 “DAO层(Data Access Object数据访问对象层)”,从安全角度上看,这一层存放了SQL语句(并不执行SQL语句,语句传给DB层执行)。这一层调用“DB层”访问数据库,它只知道“DB层”的存在,不知道数据库的存在。 “SERVICE层”,业务逻辑层,因为一个业务的实现,并不是一次数据库访问就可以完成的,所以这一层通过N次调用“DAO层的方法”实现业务逻辑,它只知道“DAO层”的存在,不知道“DB层”和数据库的存在。 “ACTION层”,调用业务逻辑层,根据返回的结果,控制JSP页面显示。它只知道业务层的存在。这一层是入侵者的攻击平台。 “Form层”,把用户POST提交的信息封装成Form对象,经过验证后提交给ACTION层处理。 “JSP层”(显示层),这一层是最终显示给用户看的页面,同时也是入侵者的攻击平台。 用户通过访问ACTION层,自动会发生:“ACTION调用SERVICE,SERVICE调用DAO,DAO调用DB,DB执行SQL语句返回结果给DAO,DAO返回给SERVICE,SERVICE返回给ACTION,ACTION把数据显示到JSP里返回给用户”。 有了样板,我们来分析这套程序中可能出现的各种web漏洞。 1、SQL注入漏洞 从SQL注入漏洞说起吧,在web漏洞里,SQL注入是最容易被利用而又最具有危害性的。怎么快速的找到呢?先分析流程,就拿用户查看文章这个流程为例:用户访问一个
action,告诉它用户想看ID为7的文章,这个action就会继续完成前面所说的流程。 如果是ASP程序,这就是最容易产生问题的时候,ASP是弱类型,接到参数后不需要转换类型,就和SQL语句连加起来。但是JSP就不一样,JSP是强类型的语言,接受有害的参数后:对于GET请求(直接在地址栏访问页面),如果这里要的是int型,即使不懂安全的程序员,也会把它(文章的ID)立刻转换成int,因为这里转换后在后面的处理中会更容易操作,而这时程序就出错了;对于POST请求,如果这里要的是int型,程序会在把它封装成Form对象时,因为自动要进行类型转化,同样发生错误,这两种错误发生后,根本不会访问后面的流程就跳出了,或许这就是JSP天生的安全性。所以,通常提交的变量是int时,不会发生问题,问题会出现在string参数这里,如果要查看某用户的信息,程序可能会让你提交如下参数:showuser.do? username=kxlzx。问题来了,因为这里是string类型,所以不懂安全的程序员顶多会判断一下是不是空,就连加成为SQL语句。有漏洞的程序大概会写成这个样子: ACTION的代码: showuser.do String username = null; username = request.getParameter("username"); Service service = new Service(); service.findByUsername(username); 得到参数后调用service,service层直接交给了Dao层,的代码: public Object findByUsername(String username) { JdbcTemplate jt=new JdbcTemplate(); String sql = "select * from Users where username=’"+username"’"; List list = jt.query(sql); ................... } 调用了DB层的JdbcTemplate,把SQL语句拼好后,传给了JdbcTemplate去执行。不用再看这里的JdbcTemplate,就可以知道里面的代码使用了Statement的executequery()方法执行,导致了SQL注入。 分析了这么半天,有读者会问:“难道我要费这么大的力气才能找到漏洞么?”。的确,通常在ASP程序里找注入时的思路就是这样子,但是我们现在是在使用了开发模式分层架构的JSP程序里,应该按照分层架构的思维去找漏洞。在回答这个问题之前,我们还得绕个弯子,看看怎么在这里预防SQL注入(java始终都是这么优美,它不会直接告诉你答案,而是一层一层的让你拨开云雾)。 刚才分析流程,是从正向分析的,从用户输入到产生漏洞,我们在防御的时候,不妨倒过来看看,从DB层入手。JdbcTemplate调用执行SQL语句,可以有两个类供我们选择,一个是Statement,另一个就是预处理的Statement,两者有着效率上和安全上的显着差别。在效率上,只要数据库支持预处理技术(sqlserver,mysql,oracle等都支持,只有少数access等不支持),就会在大量执行SQL语句时增加速度;在安全上,使用预处理,会把接受的参数也经过预处理,从而不会作为SQL语句的一部分执行,而是仅仅作为SQL语句中的参数部分
内容被执行。一旦DB层使用了预处理,DAO层的SQL语句也会发生变化,成为这个样子: public Object findByUsername(String username) { JdbcTemplate jt=new JdbcTemplate(); String sql = "select * from Users where username=?"; List list = jt.query(sql,new Object[1]{username}); ................... } 这样,SQL注入就和我们的程序几乎无关了,注意我说的是几乎,而不是全部。知道了怎么防御,于是一切在这里变的简单极了,我们应该直接去DB层找到JdbcTemplate,看看代码,一旦使用了Statement,很好,这个系统十有八九有漏洞,下面要做的是使用Editplus搜索“request.getParameter”。没有使用预处理的系统,可能会在action层进行防御,对参数过滤,但总有防御不到的时候,因为战线拉的太长了,每一个action里都可能接受参数并存在漏洞。 还有一种情况,系统一部分使用了预处理,一部分没有,这样的情况可能是因为项目赶的比较仓促,人员没有经过正规培训,最后艰难的整合到了一起。这种情况也好办,直接在DAO层搜索("’)或(’"),这些符号用于和字符串变量连加,拼SQL语句,肯定是这些语句之后的代码使用了Statement。然后再往上层找,看看哪个action调用了这个有问题的类,也可能发生SQL注入。 即使系统使用了预处理,别忘了,程序给客户使用后,客户有权利去扩展的。程序拿到客户那里,客户有了新的需求,而这个需求又不大,很可能不愿意花钱重新雇人来实现扩展功能,在这个时候也可能出现问题,客户使用自己的程序员扩展AJAX功能,这个程序员因为怕出问题,不敢动源程序,就在web.xml里加了一个servlet,这个servlet直接去调用conn。可怕的事情发生了。所以,我们的搜索漏洞规则中又加上了一条,在非层的文件中,搜索“select,update,delete”等字符串。 2、暴露程序信息漏洞 这个漏洞是怎么来的呢?我们需要从异常说起。有经验的入侵者,可以从JSP程序的异常中获取很多信息,比如程序的部分架构、程序的物理路径、SQL注入爆出来的信息等,这个漏洞很容易防御,却很难快速定位漏洞文件。出现这样漏洞的时候,通常是我们在写代码的时候,少了一些可能性的考虑而导致的。这样的问题都是经验造成的,而寻找漏洞也要通过经验加运气(要有仙缘。。。),我个人技术有限,就不多说了。防御的方法就是在程序中加上“Exception层”,自定义异常,把系统产生的异常统统包装起来,不要放过任何一个可能产生异常的地方。像腾讯的异常就包装的很好“对不起,今天的注册人数已经达到十万,请您明天再来。。。”,废话,日注册量都十万,还让不让人活啦,铁定是程序发生了异常,不敢让各位大大们看到真实的面孔。
❻ 如何调整java安全级别
要在 Internet Explorer 中配置 Java 安全性,请执行以下操作:
启动 Internet Explorer,然后单击工具菜单上的 Internet 选项。
在 Internet 选项对话框中,单击安全选项卡。
“安全”页上有四个安全区域:
选择要更改其 Java 安全性设置的区域。
Internet
本地 Intranet
受信任的站点
受限制的站点
在该区域的安全级别下,单击自定义级别。在 Internet Explorer 4.x 版本中,单击自定义级别,然后单击设置。
查看 Microsoft VM 部分(Internet Explorer 4.x 中的 Java 部分)。
在 Microsoft VM 下的“Java 权限”列表中,单击自定义。
单击 Java 自定义设置。
单击查看权限选项卡可查看当前的 Java 权限。Java 权限分为三种主要类别:
赋予未签名内容的权限
请求这些权限的未签名 Java 小程序无须发出用户提示便可运行。
允许已签名内容的权限
请求这些权限的已签名 Java 小程序无须发出用户提示便可运行。
拒绝已签名内容的权限
这些权限拒绝已签名的 Java 小程序。
单击编辑权限选项卡。选择需要用于准确控制该区域 Java 权限的选项。如果不想保留已做出的设置,可以单击重置按钮将权限重置为:
保存的权限
高安全级
中安全级
低安全级
单击确定,然后再次单击确定。
❼ javagui,和javaweb哪个安全
javagui个javaweb是两个不同的方向,它们的安全也是不一样的。首先如果是防破解之类的话,javaweb更难破解,javagui别人一反编译,啥都看到了。如果是黑客攻击数据安全方面的话,javaweb因为一直在网上提供web服务,所以总是容易被攻击,被利用漏洞,而gui则没有这些烦恼
❽ 如何防止网站被SQL注入攻击之java网站安全防护
1. 不要拼接字符串,特殊字符的过滤,以及一些特殊参数的特殊处理
2 .设置账号权限
3.尽量避免直接拼接的sql 用带参数的sql就可以了
希望可以帮到您,谢谢!
❾ JAVA的安全性究竟怎样体现出来
java的安全性主要体现在:下载到本地的javaapplet只限制在java运行环境中,而不允许它访问计算机的其他部分。
这是由于java编译器输出的并不是可执行代码,而是字节代码(bytecode),java的运行系统就是java虚拟机,每个java程序的运行都是在java虚拟机的控制之下。java虚拟机可以包含这个程序并且阻止它在系统外产生副作用。通过java语言中的适当限制增强了安全性。