发布时间:2023-01-06 文章分类:编程知识 投稿人:赵颖 字号: 默认 | | 超大 打印

Java开发网络安全常见问题

    等闲识得东风面,万紫千红总是春

1、敏感信息明文传输

用户敏感信息如手机号、银行卡号、验证码等涉及个人隐私的敏感信息不通过任何加密直接明文传输。

如下图中小红书APP 的手机短信验证码登录接口,此处没有对用户手机号和验证码等信息进行加密传输,可以很简单的截取并开展一些合法的工作。

Java开发网络安全常见问题

可以对比下其他的APP,如美团APP 的手机短信验证码登录接口,就不是明文传输。

Java开发网络安全常见问题

解决方案

前后端敏感参数的传递,可以通过加密手段如借助AES秘钥前后端加解密传输。最近的的用户手机号加密传输如下。

Java开发网络安全常见问题

2、弱口令漏洞

这种情况其实很常见,好多后台的管理系统,甚至我之前公司的管理系统现在使用123456这种密码都可以登录进去。

解决方案

3、绕过密码登录直接进入后台

首先,后台登陆验证的逻辑一般的方式都是将用户在登录界面输入的账号密码拿到数据库中的相关用户表做校验,如果输入的账号密码等于数据库中某条记录,则验证通过并且程序会给用户一个sssion,然后进入后台,反之就是返回登陆界面。

出现这种绕过密码登录的情况就是很早之前的典型案例'or'='or' 漏洞,校验用户登录的SQL如下。

select * from t_user where user_name = '’or‘='or'' And password = '123456789'

如果用户名在登录界面的 用户名 处输入要提交的信息为 'or'='or' ,就会变成如上SQL((假or真or假and(真/假))= 真)执行后得到对象的结果为真,接下来就可以通过重定向进入后台了。

Java开发网络安全常见问题Java开发网络安全常见问题

 1  执行SQL语句,执行后并得到rs对象结果,“真”或“假”
 2 Set rs = conn.Execute(sql)
 3 
 4 # 如果是真则执行以下代码
 5 If Not rs.EOF = True Then
 6 
 7 # 将UserName的属性赋给Name的Session自定义变量
 8 Session("Name") = rs("UserName")
 9 
10 # 将PassWord的属性赋给pwd的Session自定义变量
11 Session("pwd") = rs("PassWord")
12 
13 # 利用Response对象的Redirect方法重定向Manage.asp
14 Response.Redirect("Manage.asp")

View Code

解决方案

4、浏览器缓存漏洞

系统正常存在的合法用户在“注销”后,但未关闭浏览器,此时点击浏览器“后退”按钮,可从本地页面缓存中读取数据,绕过了服务端filter过滤。

解决方案

在很多项目的 Config 配置文件中都有发现的如下配置,即配置filter对存放敏感信息的页面限制缓存。

httpResponse.setHeader(“Cache-Control”,“no-cache”);
httpResponse.setHeader(“Cache-Control”,“no-store”);
httpResponse.setDateHeader(“Expires”, 0);
httpResponse.setHeader(“Pragma”,“no-cache”);

5、SQL注入漏洞

在HTTP 请求中注入恶意的SQL 代码,最常见的手段就是在访问URL 后拼接SQL 代码,服务器使用参数构建数据库SQL 命令时,恶意SQL 被一起构造,并在数据库中执行。如下拼接SQL

String query =SELECT * FROM t_users WHERE user_id = ’” + request.getParameter(“id”) + “’”; 

如果参数id 中是 or 1=1 ,就会返回所有数据。
解决方案

PreparedStatement pstmt = con.prepareStatement(“SELECT * FROM t_users WHERE u_name = ?”);
pstmt.setString(1, “tjt”);

6、文件上传漏洞

在文件上传前端界面,用户上传了一个可执行的脚本文件,并通过此脚本文件获得执行服务端命令的能力。

解决方案

7、WEB 容器漏洞

Tomcat 有一个管理后台,其用户名和密码在Tomcat安装目录下的conf omcat-users.xml文件中配置,很多用户经常采用的是一些弱口令。而Tomcat 又支持在后台部署war包,可以直接将webshell 部署到web目录下,如果tomcat 后台管理用户存在弱口令,这很容易被利用上传webshell。

Java开发网络安全常见问题

Java开发网络安全常见问题

解决方案

8、XSS 攻击

XSS(cross site scripting,即跨站脚本攻击),将一段Html 和JavaScript 代码注入到用户浏览的网页上。XSS 可以大概分为三类, DomXSS、反射型XSS 和 存储型XSS。

<input type="text" name="name" value="tjt">

在前端界面有很多用户输入字符的操作,如上表单,如果,用户输入的不是一个正常的字符串,而是

"/><script>alert(“tjt-hello-boy-isMe”)</script><!-

然后,JS页面变成下面的内容,在输入框 input 的后面带上了一段脚本代码。

<input type="text" name="name" value="tjt">
<script>alert(“tjt-hello-boy-isMe”)</script><!-"/>

从上可以看出,XSS攻击的威力取决于用户输入的JS 脚本。攻击者提交恶意的JS 代码,客户端没有做xss校验,都会存在客户端注入问题,就会出现这段恶意执行的JS 代码。

解决方案

Java开发网络安全常见问题

9、CSRF 攻击

XSRF Cross-site request forgery,即跨站请求伪造,指攻击者通过跨站请求,以合法的用户身份进行非法操作。攻击者盗用你的身份,以你的名义向第三方网站发送恶意请求。CRSF 能做的事情包括利用你的身份发邮件,发短信,进行交易转账,甚至盗取账号信息,容易造成个人隐私泄露以及财产安全。

早期就会有很多这种网站,挂了很多靓妹的图片或者让人有种想要点击的那些图片,一旦你点击了,其实是打开了一个链接比如发起银行转账请求,而你的浏览器又恰巧登录浏览过该银行并且缓存未失效,不出意外的话意外就发生了。随之后来的隐藏域手段、验证码、二次确认等机制这种攻击案例就少了。

解决方案

Java开发网络安全常见问题

10、DDOS 攻击

DDoS:Distributed Denial of Service,DDOS 攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。它的目的就是利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。
DDoS 攻击是通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的,其具体有下面几种形式:

解决方案

1、监控访问数据、过滤恶意流量,定期检查服务器软件安全漏洞,对外关闭不必要的服务和端口,在服务器防火墙中,只开启使用的端口,比如网站web服务的80端口、数据库的3306端口、SSH服务的22端口等。

2、采用高性能的网络设备,当大量攻击发生的时候请他们在网络接点处做一下流量限制来对抗某种类的DDOS攻击是非常有效的。

3、HTTP请求拦截,如果恶意请求有特征,直接拦截就可以。HTTP请求的特征一般有两种:IP地址和User Agent字段。

4、尽量避免NAT 的使用,因为NAT需要对地址来回转换,会较大降低网络通信能力。

5、足足的网络带宽,带宽直接决定了能抗受攻击的能力,假若仅仅有10M的话,无论采取什么措施都很难对抗现在的DDOS 的 SYNFlood攻击,没钱搞 100M有钱的搞到1000M。

6、将网站做成静态页面或者伪静态,将网站做成静态页面,不仅能大大提高抗攻击能力,而且还给黑客入侵带来不少麻烦,至少到现在为止关于HTML的溢出还没出现。

7、安装专业抗DDOS 防火墙。

8、备份网站,有一个备份网站,容错率就高很多,生产服务器万一下线了,可以立刻切换到备份网站。

等闲识得东风面

万紫千红总是春