Java Web编程
一、二、三有空补
四. Web应用的安全
1. CSS攻击,跨站脚本攻击
跨站脚本,顾名思义,就是恶意攻击者利用网站漏洞往Web页面里插入恶意代码,一般需要以下几个
条件:
(1)客户端访问的网站是一个有漏洞的网站,但是他没有意识到;
(2)在这个网站中通过一些手段放入一段可以执行的代码,吸引客户执行(通过鼠标点击等);
(3)客户点击后,代码执行,可以达到攻击目的。
解决方案:对用户输入的数据进行HTML转移处理。如今很多开源框架默认就支持HTML的转义。
2. CSRF攻击(Cross Site Request Forgery, 跨站域请求伪造)
你这可以这么理解 CSRF 攻击:攻击者盗用了你的身份,伪装成你发送恶意请求。CSRF能够做的事
情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包
括:个人隐私泄露以及财产安全。
具体攻击过程如下:
(1)用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
(2)在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正
常发送请求到网站A;
(3)用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
(4)网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A
解决方案:
(1)将cookie设置成HttpOnly
(2)增加token
其原理是在请求中放入攻击者所不能伪造的信息,并且该新信息不存在于cookie中。鉴于此,系
统开发人员可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端进行token验证,
如果请求中没有token或者token内容不正确,则认为CSRF攻击而拒绝该请求。例如,token可以存放
在表单中的隐藏域中:<input type="hidden" name="_token" value="tokenvalue"/>。token的值通过服
务端生成,表单提交后token的值通过POST请求与参数一同带到服务端,每次会话可以使用相同的
token,会话过期,则token失效,攻击者因无法获取token,也就无法伪造请求。
HttpSession session=request.getSession()
Object token=session.getAttribute("_token")
if(token==null||"".equals(token))
{
session.setAttribute("_token",UUID.randomUUID().toString());
}
3.SQL注入攻击
解决方案:
(1)使用预编译语句(PreparedStatement)
预编译语句使用参数占位符来替代需要动态传入的参数,这样攻击者无法改变SQL语句的结构,
SQL语句的语义不会发生变化,即便用户输入sql,它会将其转义。
例如,原语句:
select * from hhuser where nick=nickname and password=password
例如用户输入 'or '1'='1时,不使用预编译,生成语句为:
select * from hhuser where nick='zhangsan' and password='' or '1'='1'
使用预编译:
select * from hhuser where nick='zhangsan' and password='\' or \'1\'=\'1'
可见发生了转义。
(2)使用ORM框架,如IBATIS和Hibernate等都支持输入变量的转义实现办法时通过#配置变量
4.文件上传漏洞
(1)一般处理方法
为了防止用户上传恶意的可执行文件和脚本,以及将文件服务器当做免费的文件存储服务器使用,
我们需要对上传的文件进行白名单校验并限制上传文件的大小,上传文件需要重新命名,使共攻者无
法猜测上传文件的访问路径。对于上传的文件来说,不能简单地通过后缀名称判断文件的类型,因为
恶意攻击可以将可执行文件的后缀名称改成图片或者其它后缀类型,诱导用户执行。因此,判断文件
类型需要使用更安全的方式,很多类型的文件起使得几个字节内容使固定得,根据这几个字节的内容,
就可以确定文件的类型,这几个字节被称为魔数。
(2)配合使用imagemaglck
对于图片类型的文件,可以上传后对图片进行相应的缩放,破坏恶意用户上传的二进制可执行文
件的结构。imagemaglck是一套功能强大、稳定并且开源的对图片进行处理的开发工具包,能处理多
种格式的图片文件,可以利用imagemaglck来对图片进行缩放。
魔数枚举类型:
public enum FileType {
/** JPEG */
JPEG("FFD8FF"),
/** PNG */
PNG("89504E47"),
/** GIF */
GIF("47494638"),
/** TIFF */
TIFF("49492A00"),
/** Windows bitmap */
BMP("424D"),
/** CAD */
DWG("41433130"),
/** Adobe photoshop */
PSD("38425053"),
/** Rich Text Format */
RTF("7B5C727466"),
/** XML */
XML("3C3F786D6C"),
/** HTML */
HTML("68746D6C3E"),
/** Outlook Express */
DBX("CFAD12FEC5FD746F "),
/** Outlook */
PST("2142444E"),
/** doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db */
OLE2("0xD0CF11E0A1B11AE1"),
/** Microsoft Word/Excel */
XLS_DOC("D0CF11E0"),
/** Microsoft Access */
MDB("5374616E64617264204A"),
/** Word Perfect */
WPB("FF575043"),
/** Postscript */
EPS_PS("252150532D41646F6265"),
/** Adobe Acrobat */
PDF("255044462D312E"),
/** Windows Password */
PWL("E3828596"),
/** ZIP Archive */
ZIP("504B0304"),
/** ARAR Archive */
RAR("52617221"),
/** WAVE */
WAV("57415645"),
/** AVI */
AVI("41564920"),
/** Real Audio */
RAM("2E7261FD"),
/** Real Media */
RM("2E524D46"),
/** Quicktime */
MOV("6D6F6F76"),
/** Windows Media */
ASF("3026B2758E66CF11"),
/** MIDI */
MID("4D546864");
private String value = "";
private FileType(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
Java Web编程的更多相关文章
- Java Web 编程
Java Web 编程 21天学通JAVA-WEB开发:http://files.cnblogs.com/files/maven-chao/Java_Web.zip
- Java Web编程技术学习要点及方向
学习编程技术要点及方向亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理.要Jar, 不要War:以小为主,以简为宝,集堆而成.去繁取简 Spring Boot,明日之春(future of ...
- Java Web编程的主要组件技术——Struts入门
参考书籍:<J2EE开源编程精要15讲> Struts是一个开源的Java Web框架,很好地实现了MVC设计模式.通过一个配置文件,把各个层面的应用组件联系起来,使组件在程序层面联系较少 ...
- Java Web编程的主要组件技术——MVC设计模式
参考书籍:<J2EE开源编程精要15讲> MVC(Model View Controller),Model(模型)表示业务逻辑层,View(视图)代表表述层,Controller(控制)表 ...
- Java Web编程的主要组件技术——JDBC
参考书籍:<J2EE开源编程精要15讲> JDBC(Java DataBase Connectivity)是Java Web应用程序开发的最主要API之一.当向数据库查询数据时,Java应 ...
- Java Web编程的主要组件技术——Hibernate核心组件
参考书籍:<J2EE开源编程精要15讲> Hibernate配置文件 1) hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8 ...
- Java Web编程的主要组件技术——Struts核心组件
参考书籍:<J2EE开源编程精要15讲> Struts配置文件struts-config.xml Struts核心文件,可配置各种组件,包括Form Beans.Actions.Actio ...
- Java Web编程的主要组件技术——Servlet
参考书籍:<J2EE开源编程精要15讲> Servlet是可以处理客户端传来的HTTP请求,并返回响应,由服务器端调用执行,有一定编写规范的Java类. 例如: package test; ...
- Java Web编程的主要组件技术——Hibernate入门
参考书籍:<J2EE开源编程精要15讲> Hibernate是对象/关系映射(ORM,Object/Relational Mapping)的解决方案,就是将Java对象与对象关系映射到关系 ...
- Java Web编程的主要组件技术——Struts的高级功能
参考书籍:<J2EE开源编程精要15讲> Struts对国际化的支持 "国际化"(I18N)指一个应用程序在运行时能根据客户端请求所来的国家/地区.语言的不同显示不同的 ...
随机推荐
- 修改laravel中的pagination的样式
运行如下命令,拷贝出pagination样式到public/vendor目录下, 然后在pagination实例上调用links(‘传路径’)方法 使用起来非常方便,同时也可以自定义样式
- codefirst 关系处理
1.http://www.cnblogs.com/libingql/archive/2013/01/31/2888201.html 2.多对多 protected override void OnMo ...
- ubuntu14.04LTS下制作安装启动U盘
ubuntu自带的启动U盘制作工具在我的非UEFI电脑上无法启动,找到一个国产的好用东西:深度deepin-boot-maker. 下载地址(官方百度盘):点击下载 用起来也很简单,只需要选择下载好的 ...
- <%@ include > 与< jsp:include >
include指令表示在JSP编译时插入一个包含文本或者代码的文件,把文件中的文本静态地包含过去.也就是说,会把被包含的页面拷贝到包含的页面中指令所在的位置. 语法格式:<%@ include ...
- Graphic 完成文字缩放
思路:将文字生成图片,再加载此图片伸缩至需要大小. 首先要获取文字的实际大小.宽度高度,再通过图片缩放就OK了 public static void DrawText() { Font f = , F ...
- C# DataGridView控件动态添加新行
C# DataGridView控件动态添加新行 DataGridView控件在实际应用中非常实用,特别需要表格显示数据时.可以静态绑定数据源,这样就自动为DataGridView控件添加相应的行.假如 ...
- C#开源网络通信库PESocket的使用
PESocket PESocket开源项目GitHub地址:点击跳转 基于C#语言实现的高效便捷网络库.支持集成到Unity当中使用. 不用过多了解网络通信内部原理,只需几行简单的代码,便能简捷快速开 ...
- .NET平台的资源文件管理
可以管理文本.图片等不同类型的资源 管理方式(增删改) 可以直接修改XXX.resx源文件(XML格式,文本直接管理内容,图片需要指定路径,资源名和图片名可以不同) 也可以在VS的可视化界面上进行操作 ...
- 《C#多线程编程实战》2.6 ManualResetEventSlim
这个比较好理解的. 正如书上所言,如同一直在打开的大门的屋子,谁要进去,谁就自己的关门,出来的时候在开开. 常用的方法 有三个: Set() //设置为有信号,也就是让等待的线程不用继续等待,唤醒等 ...
- 定时器timer类
timer类 Timer(定时器)是Thread的派生类,用于在指定时间后调用一个方法. 构造方法: Timer(interval, function, args=[], kwargs={}) in ...