简介

由于网络技术日趋成熟,黑客们也将注意力从以往对网络服务器的攻击逐步转移到了对web应用的攻击。据最新调查,信息安全有75%都发生在web应用而非网络层面。

场景

  1. 控制访问的权限。只让可以访问的访问到最小的资源和权限。
  2. 控制输入内容。所有输入都可能是不安全的,所以要过滤。
  3. 保证业务的安全。
  4. 保证数据的安全性。
  5. 控制输出内容。要过滤输出的内容,解决浏览器安全问题。

解决问题

输入和输出的很多问题,都可以通过Aop的思想来统一解决。尽量让应用的问题都通过架构去实现,以避免因为开发人员因素,而且对正常业务是透明、不可见的。
人为的因素,需要有代码评审流程,甚至需要安全的软件构建流程去规避。

应用安全

  1. 千万不要用root!!!启动程序。
  2. 运行的用户不允许对源代码有修改的权限。
  3. 需要有新文件生成的目录(比如文件上传,动态代理等),不能有执行的权限。
  4. 不允许用户访问目录。基于tomcat来说,把所有的视图文件(jsp、ftl等)放到WEB-INF下。webapp下不直接放任何文件。

控制输入内容

用户所有的输入,都可以认为是不安全的。千!万!不!要!以为用户的输入是合法的。要采取防御式的方式去处理应用。确保应用的安全。一般我们提倡的是:防御式架构和防御式编程。

控制http参数

  1. 千万不要乱用数据类型。使用基本数据类型,少用包装类。包装类容易被攻击。不要用String去接受所有类型数据。原则上:是什么类型就用什么类型去接收。
  2. 通过架构设计,添加一层设置处理http参数(验证数据的类型、合法性、长度和范围)。一般都是通过aop来实现。比如:对邮件、手机的验证,对非法数字(小于0)的验证,对整数最大值的验证,对字符串最大长度的验证等。

文件上传

  1. 控制文件类型,通过后缀控制。上传文件的后缀要使用白名单,不要使用黑名单。只允许我们知道的文件类型上传。这样能确保安全性。
  2. 控制文件的大小。文件大小必须控制,否则容易出现系统硬盘资源被吃满。
  3. 上传的文件要压缩。这样就算里面有攻击的代码也会被破坏掉。
  4. 上传的文件名要随机、而且没有规律。可以考虑uuid。否则容易被猜测,然后把文件拖走。

sql注入

  1. 通过框架的参数化去解决。
  2. 要有严格的规范以及日常的代码评审。人为的因素,往往是很多安全问题的罪魁祸首。
  3. 要严格规划应用对数据库操作的用户。只允许有查看和修改数据的权限。就算是出了安全问题,也能把问题减少到最低,比如:至少避免被攻击者直接drop database.

html注入

通过架构的方法,净化。实现思路aop。
在http到执行方法前,把标签净化掉。如果确实有需要富文本的地方,一定也要使用白名单的方式,只允许少数合法标签,其他的也全部净化。
java有一个开发框架是:Anti-Samy,或者自己通过正则来实现。

数据敏感词

通过架构的方法,分词、词库去解决。实现思路aop。
可以根据敏感的程序来判断处理机制。
如果程度一般,则可以通过**来替换。
如果程度太高,涉及黄或者国家安全等,则可以拒绝输入。

保证业务的安全

每一个业务都要考虑是不安全的。然后都应该有对应的处理机制。

防止暴力破解

暴力破解是一种非常容易被忽视的安全问题。
这种问题的解决思路:

  1. 提升密码复杂度。太简单的密码要拒绝。
  2. 记录验证频率。超过这个频率就拒绝。

比如:登录,短信验证码,支付密码等用户核心安全业务。

不安全的直接对象引用

不安全的直接对象引用 ,即访问不属于自己的业务。
在业务设计的时候要明确哪些是允许其他用户访问的,其他的都不允许访问。还是根据最小原则来处理。
比如:不访问访问别人的订单信息。

不要信任用户输入的数据

重要的信息,千万不能通过让用户传输过来。千万不能自认为这些用户不会输入啊,都是我们设置好的。
比如:订单的金额,是否有操作的权限等。

严格的权限控制

  1. 水平权限控制。用户是否有操作业务的操作。比如,用户对应的角色和身份不允许访问指定的业务。
  2. 垂直权限控制。用户是否按指定的业务流程操作。比如,在一些流程过程中需要先有合同才能进货,在一些流程中需要先填写个人信息才能使用后面的功能。

保证数据的安全

互联网的时代,数据也是极为重要的资源。

不可以预见性

对于重要资源,要随机性,要不然容易被测试到规则,全部拖走。
比如用户外页信息 /home/x.html。这里的x用的是数字。

控制资源访问的频率

比如,只允许同一个ip访问100次每天。这个规则,可以根据产品或者运营来共同制定。实现思路:通过aop

记录数据操作记录

重要的信息操作的时候,要有记录。实现思路:通过aop。

控制输出内容

输出的内容确保是干净的,对用户不会有危险的。同时也不会泄露服务器的信息。

过滤敏感信息

  1. 把代码的注释去除。通过aop实现。
  2. 拒绝服务器相关的信息,比如ip。这个需要在代码评审的时候核实。不能有任何硬编码泄露服务器信息的地方。
  3. 异常不要说的太明确。每个异常都是要处理的。如果不清楚的异常,提示模糊信息即可,然后把明确的信息记录到日志。 通过aop实现

验证方法

  1. 通过ibm appscan工具验证。能解决常见的安全问题
  2. 目录遍历。御剑。
  3. web后台暴力破解。httprint。

更牛B的解决方案

云WAF发展的新道路。感兴趣的看参考资料。感觉棒棒哒,果断还是验证了那句经典的话重复就会被解决

参考资料

  1. Web应用安全——攻防对抗发展趋势
  2. Web应用安全
  3. web应用系统安全开发规范
  4. 常见web应用安全问题

web安全——应用(java)的更多相关文章

  1. 从myeclipse导入eclipse,不能识别为web项目(java项目转为web项目)

    1.进入项目目录,找到.project文件,打开. 2.找到<natures>...</natures>代码段. 3.在第2步的代码段中加入如下标签内容并保存:         ...

  2. Java web项目引用java项目,类型找不到

    Java web项目引用java项目,类型找不到 错误信息: java.lang.ClassNotFoundException: org.codehaus.jackson.map.ObjectMapp ...

  3. C# 开发XML Web Service与Java开发WebService

    一.web service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量 ...

  4. 使用Maven构建javaWeb项目时,启动tomcat出错:严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException: org.springframework.web.conte

    在初学使用maven构建javaWeb的项目的时候,启动tomcat加载时,总是提示如下错误,辛苦一番终于找到解决办法. 严重: Error configuring application liste ...

  5. tomcat : Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException:

    错误 严重: Error configuring application listener of class org.springframework.web.context.ContextLoader ...

  6. 在Web开发方面Java跟PHp八大对比

    在Web开发方面Java跟PHp八大对比 <本文摘自百度经验,用来简单对比一下这两种语言> 一. 语言比较 PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点.语法和c语言比 ...

  7. 实战WEB 服务器(JAVA编写WEB服务器)

    实战WEB 服务器(JAVA编写WEB服务器) 标签: web服务服务器javawebsockethttp服务器 2010-04-21 17:09 11631人阅读 评论(24) 收藏 举报  分类: ...

  8. office web apps 整合Java web项目

    之前两篇文章将服务器安装好了,项目主要的就是这么讲其整合到我们的项目中,网上大部分都是asp.net的,很少有介绍Java如何整合的,经过百度,终于将其整合到了我的项目中. 首先建个servlet拦截 ...

  9. Selenium Web 自动化 - Selenium(Java)环境搭建

    Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...

  10. org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException

    使用Intelij Idea时,报错如下: org.apache.catalina.core.StandardContext.listenerStart Error configuring appli ...

随机推荐

  1. 简单看看这两个类 String和StringBuilder

    我记得以前在园子里面讨论这两个类的文章有很多很多,并且还拿出了很多的测试报告,在什么情况下,谁比谁快,在什么情况下,该用谁 不该用谁等等这些,我这里就不比较了,我就简单看看他们里面的内部实现,那就先看 ...

  2. IP地址(IPv4)/IPv6地址的正则表达式

    原地址:http://pfeishao.blog.163.com/blog/static/18162337020112113130453/ Pv4地址正则表达式:^((25[0-5]|2[0-4]\d ...

  3. Windows下常用软件工具的命令

    Linux上主要操作是命令,懂一点linux知识的都知道,其实windows下边很多工具也是可以用命令来操作打开的,这样会提高效率,节省很多的时间.下边就记录一下常用的命令. 一.常用命令 1.远程桌 ...

  4. 错误“Unexpected namespace prefix "xmlns" found for tag LinearLayout”的解决方法(转)

    (转自:http://blog.csdn.net/bombzhang/article/details/12676789) 有一次升级开发工具后发现xml脚本出现错误“Unexpected namesp ...

  5. jQuery 3.0 的变化

    时隔 3 个月,jQuery 团队终于发布了 3.0 Alpha 版本.有两个版本 jQuery compat 3.0 和 jQuery 3.0. jQuery compat 3.0 对应之前的 1. ...

  6. Mac OSX下卸载Nodejs

    有时手贱看到新版本就升级,升级后发现一堆模块不能用了,心情好慢慢调,但也有调不好的时候,只能卸载重装低版本的node了. 我的机器环境如下 1. Mac OSX 10.10.3 2. node为0.1 ...

  7. [转]html5 js 访问 sqlite 数据库的操作类

    本文转自:http://blog.csdn.net/tsxw24/article/details/7613815 webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使 ...

  8. 翻译《Writing Idiomatic Python》(四):字典、集合、元组

    原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...

  9. Qt5 发布的exe应用程序Windows下无法执行的问题解决方案

    本解决方案着重解决报错为: This application has requested the Runtime to terminate it in an unusual way. 的错误. 即: ...

  10. UVA 11582 Colossal Fibonacci Numbers!【数学】

    大一刚开始接触ACM就买了<算法竞赛入门经典>这本书,当时只能看懂前几章,而且题目也没做,粗鄙地以为这本书不适合自己.等到现在快大三了再回过头来看,发现刘老师还是很棒的! 扯远了... 题 ...