一、二、三有空补

四.  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,也就无法伪造请求。

  1. HttpSession session=request.getSession()
  2. Object token=session.getAttribute("_token")
  3. if(token==null||"".equals(token))
  4. {
  5. session.setAttribute("_token",UUID.randomUUID().toString());
  6. }

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来对图片进行缩放。

魔数枚举类型:

  1. public enum FileType {
  2.  
  3. /** JPEG */
  4. JPEG("FFD8FF"),
  5.  
  6. /** PNG */
  7. PNG("89504E47"),
  8.  
  9. /** GIF */
  10. GIF("47494638"),
  11.  
  12. /** TIFF */
  13. TIFF("49492A00"),
  14.  
  15. /** Windows bitmap */
  16. BMP("424D"),
  17.  
  18. /** CAD */
  19. DWG("41433130"),
  20.  
  21. /** Adobe photoshop */
  22. PSD("38425053"),
  23.  
  24. /** Rich Text Format */
  25. RTF("7B5C727466"),
  26.  
  27. /** XML */
  28. XML("3C3F786D6C"),
  29.  
  30. /** HTML */
  31. HTML("68746D6C3E"),
  32.  
  33. /** Outlook Express */
  34. DBX("CFAD12FEC5FD746F "),
  35.  
  36. /** Outlook */
  37. PST("2142444E"),
  38.  
  39. /** doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db */
  40. OLE2("0xD0CF11E0A1B11AE1"),
  41.  
  42. /** Microsoft Word/Excel */
  43. XLS_DOC("D0CF11E0"),
  44.  
  45. /** Microsoft Access */
  46. MDB("5374616E64617264204A"),
  47.  
  48. /** Word Perfect */
  49. WPB("FF575043"),
  50.  
  51. /** Postscript */
  52. EPS_PS("252150532D41646F6265"),
  53.  
  54. /** Adobe Acrobat */
  55. PDF("255044462D312E"),
  56.  
  57. /** Windows Password */
  58. PWL("E3828596"),
  59.  
  60. /** ZIP Archive */
  61. ZIP("504B0304"),
  62.  
  63. /** ARAR Archive */
  64. RAR("52617221"),
  65.  
  66. /** WAVE */
  67. WAV("57415645"),
  68.  
  69. /** AVI */
  70. AVI("41564920"),
  71.  
  72. /** Real Audio */
  73. RAM("2E7261FD"),
  74.  
  75. /** Real Media */
  76. RM("2E524D46"),
  77.  
  78. /** Quicktime */
  79. MOV("6D6F6F76"),
  80.  
  81. /** Windows Media */
  82. ASF("3026B2758E66CF11"),
  83.  
  84. /** MIDI */
  85. MID("4D546864");
  86.  
  87. private String value = "";
  88.  
  89. private FileType(String value) {
  90. this.value = value;
  91. }
  92.  
  93. public String getValue() {
  94. return value;
  95. }
  96.  
  97. public void setValue(String value) {
  98. this.value = value;
  99. }
  100.  
  101. }

Java Web编程的更多相关文章

  1. Java Web 编程

    Java Web 编程 21天学通JAVA-WEB开发:http://files.cnblogs.com/files/maven-chao/Java_Web.zip

  2. Java Web编程技术学习要点及方向

    学习编程技术要点及方向亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理.要Jar, 不要War:以小为主,以简为宝,集堆而成.去繁取简 Spring Boot,明日之春(future of ...

  3. Java Web编程的主要组件技术——Struts入门

    参考书籍:<J2EE开源编程精要15讲> Struts是一个开源的Java Web框架,很好地实现了MVC设计模式.通过一个配置文件,把各个层面的应用组件联系起来,使组件在程序层面联系较少 ...

  4. Java Web编程的主要组件技术——MVC设计模式

    参考书籍:<J2EE开源编程精要15讲> MVC(Model View Controller),Model(模型)表示业务逻辑层,View(视图)代表表述层,Controller(控制)表 ...

  5. Java Web编程的主要组件技术——JDBC

    参考书籍:<J2EE开源编程精要15讲> JDBC(Java DataBase Connectivity)是Java Web应用程序开发的最主要API之一.当向数据库查询数据时,Java应 ...

  6. Java Web编程的主要组件技术——Hibernate核心组件

    参考书籍:<J2EE开源编程精要15讲> Hibernate配置文件 1) hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8 ...

  7. Java Web编程的主要组件技术——Struts核心组件

    参考书籍:<J2EE开源编程精要15讲> Struts配置文件struts-config.xml Struts核心文件,可配置各种组件,包括Form Beans.Actions.Actio ...

  8. Java Web编程的主要组件技术——Servlet

    参考书籍:<J2EE开源编程精要15讲> Servlet是可以处理客户端传来的HTTP请求,并返回响应,由服务器端调用执行,有一定编写规范的Java类. 例如: package test; ...

  9. Java Web编程的主要组件技术——Hibernate入门

    参考书籍:<J2EE开源编程精要15讲> Hibernate是对象/关系映射(ORM,Object/Relational Mapping)的解决方案,就是将Java对象与对象关系映射到关系 ...

  10. Java Web编程的主要组件技术——Struts的高级功能

    参考书籍:<J2EE开源编程精要15讲> Struts对国际化的支持 "国际化"(I18N)指一个应用程序在运行时能根据客户端请求所来的国家/地区.语言的不同显示不同的 ...

随机推荐

  1. 如何获取.properties配置文件

    如何获取.properties配置文件 分析思路: 先使用流和文件关联,即读取文件 再读取文件内容,一行一行读取 字符分割“=”  键值对 然后把键值对放到集合中去 但是Properties类里面有方 ...

  2. bootstrap实现嵌套列

    <!DOCTYPE html> <html> <head> <title>Bootstrap 实例 - 嵌套列</title> <li ...

  3. HDU 6034 Balala Power! (贪心+坑题)

    题意:给定一个 n 个字符串,然后问你怎么给 a-z赋值0-25,使得给定的字符串看成26进制得到的和最大,并且不能出现前导0. 析:一个很恶心的题目,细节有点多,首先是思路,给定个字符一个权值,然后 ...

  4. Java WEB中的HttpServletResponse数据传递

    1.什么是HttpServletResponse 2.使用HttpServletResponse向浏览器发送数据及相关实例. 实例1:实现文件下载功能 实例2:实现验证码注册 实例3:实现页面3秒后跳 ...

  5. java IO 对象流 反序列化和序列化

    例: 重点:需要序列化的对象必须实现Serializable接口 //需要序列化的对象 public class User implements Serializable { private Stri ...

  6. (转)不定义JQuery插件,不要说会JQuery

    原文地址:http://www.cnblogs.com/xcj26/p/3345556.html 一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#" ...

  7. springboot调用微信的jscode2session报JSONObject异常

    问题背景: 服务器为Centos6.5 JDK:OpenJDK1.7 tomcat7 项目为微信小程序api的后端代码,解密用户信息,代码是采用springboot写的 异常信息: 代码: json异 ...

  8. Java集合类总结 (四)

    PriorityQueue类 优先队列不管你按照什么顺序插入元素,出队列的时候元素都是按顺序输出的.也就是每次调用remove的时候,都返回当前队列中最小的元素.然后队列中的元素不是维持排序状态的,如 ...

  9. form表单以get方式提交时action中?后面的参数部分不生效

    form表单的提交方式是get方式,action="?sss=test",问号后面参数是接受不到的,谨记!

  10. 声明函数指针、回调函数、函数对象------c++程序设计基础、编程抽象与算法策略

    声明函数指针 #include<iostream> using namespace std; double a(double aa) { return aa; } int main() { ...