- 浏览: 231018 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hl174:
写的不错,赞一个
在Java中字节与十六进制的相互转换主要思想有两点 -
l540151663:
也是个好方法
String为空判断
web安全——应用安全(java)
简介
由于网络技术日趋成熟,黑客们也将注意力从以往对网络服务器的攻击逐步转移到了对web应用的攻击。据最新调查,信息安全有75%都发生在web应用而非网络层面。
场景
控制访问的权限。只让可以访问的访问到最小的资源和权限。
控制输入内容。所有输入都可能是不安全的,所以要过滤。
保证业务的安全。
保证数据的安全性。
控制输出内容。要过滤输出的内容,解决浏览器安全问题。
解决问题
输入和输出的很多问题,都可以通过Aop的思想来统一解决。尽量让应用的问题都通过架构去实现,以避免因为开发人员因素,而且对正常业务是透明、不可见的。
人为的因素,需要有代码评审流程,甚至需要安全的软件构建流程去规避。
应用安全
千万不要用root!!!启动程序。
运行的用户不允许对源代码有修改的权限。
需要有新文件生成的目录(比如文件上传,动态代理等),不能有执行的权限。
不允许用户访问目录。基于tomcat来说,把所有的视图文件(jsp、ftl等)放到WEB-INF下。webapp下不直接放任何文件。
控制输入内容
用户所有的输入,都可以认为是不安全的。千!万!不!要!以为用户的输入是合法的。要采取防御式的方式去处理应用。确保应用的安全。一般我们提倡的是:防御式架构和防御式编程。
控制http参数
千万不要乱用数据类型。使用基本数据类型,少用包装类。包装类容易被攻击。不要用String去接受所有类型数据。原则上:是什么类型就用什么类型去接收。
通过架构设计,添加一层设置处理http参数(验证数据的类型、合法性、长度和范围)。一般都是通过aop来实现。比如:对邮件、手机的验证,对非法数字(小于0)的验证,对整数最大值的验证,对字符串最大长度的验证等。
文件上传
控制文件类型,通过后缀控制。上传文件的后缀要使用白名单,不要使用黑名单。只允许我们知道的文件类型上传。这样能确保安全性。
控制文件的大小。文件大小必须控制,否则容易出现系统硬盘资源被吃满。
上传的文件要压缩。这样就算里面有攻击的代码也会被破坏掉。
上传的文件名要随机、而且没有规律。可以考虑uuid。否则容易被猜测,然后把文件拖走。
sql注入
通过框架的参数化去解决。
要有严格的规范以及日常的代码评审。人为的因素,往往是很多安全问题的罪魁祸首。
要严格规划应用对数据库操作的用户。只允许有查看和修改数据的权限。就算是出了安全问题,也能把问题减少到最低,比如:至少避免被攻击者直接drop database.
html注入
通过架构的方法,净化。实现思路aop。
在http到执行方法前,把标签净化掉。如果确实有需要富文本的地方,一定也要使用白名单的方式,只允许少数合法标签,其他的也全部净化。
java有一个开发框架是:Anti-Samy,或者自己通过正则来实现。
数据敏感词
通过架构的方法,分词、词库去解决。实现思路aop。
可以根据敏感的程序来判断处理机制。
如果程度一般,则可以通过**来替换。
如果程度太高,涉及黄或者国家安全等,则可以拒绝输入。
保证业务的安全
每一个业务都要考虑是不安全的。然后都应该有对应的处理机制。
防止暴力破解
暴力破解是一种非常容易被忽视的安全问题。
这种问题的解决思路:
提升密码复杂度。太简单的密码要拒绝。
记录验证频率。超过这个频率就拒绝。
比如:登录,短信验证码,支付密码等用户核心安全业务。
不安全的直接对象引用
不安全的直接对象引用 ,即访问不属于自己的业务。
在业务设计的时候要明确哪些是允许其他用户访问的,其他的都不允许访问。还是根据最小原则来处理。
比如:不访问访问别人的订单信息。
不要信任用户输入的数据
重要的信息,千万不能通过让用户传输过来。千万不能自认为这些用户不会输入啊,都是我们设置好的。
比如:订单的金额,是否有操作的权限等。
严格的权限控制
水平权限控制。用户是否有操作业务的操作。比如,用户对应的角色和身份不允许访问指定的业务。
垂直权限控制。用户是否按指定的业务流程操作。比如,在一些流程过程中需要先有合同才能进货,在一些流程中需要先填写个人信息才能使用后面的功能。
保证数据的安全
互联网的时代,数据也是极为重要的资源。
不可以预见性
对于重要资源,要随机性,要不然容易被测试到规则,全部拖走。
比如用户外页信息 /home/x.html。这里的x用的是数字。
控制资源访问的频率
比如,只允许同一个ip访问100次每天。这个规则,可以根据产品或者运营来共同制定。实现思路:通过aop
记录数据操作记录
重要的信息操作的时候,要有记录。实现思路:通过aop。
控制输出内容
输出的内容确保是干净的,对用户不会有危险的。同时也不会泄露服务器的信息。
过滤敏感信息
把代码的注释去除。通过aop实现。
拒绝服务器相关的信息,比如ip。这个需要在代码评审的时候核实。不能有任何硬编码泄露服务器信息的地方。
异常不要说的太明确。每个异常都是要处理的。如果不清楚的异常,提示模糊信息即可,然后把明确的信息记录到日志。 通过aop实现
验证方法
通过ibm appscan工具验证。能解决常见的安全问题
目录遍历。御剑。
web后台暴力破解。httprint。
更牛B的解决方案
云WAF发展的新道路。感兴趣的看参考资料。感觉棒棒哒,果断还是验证了那句经典的话重复就会被解决。
参考资料
简介
由于网络技术日趋成熟,黑客们也将注意力从以往对网络服务器的攻击逐步转移到了对web应用的攻击。据最新调查,信息安全有75%都发生在web应用而非网络层面。
场景
控制访问的权限。只让可以访问的访问到最小的资源和权限。
控制输入内容。所有输入都可能是不安全的,所以要过滤。
保证业务的安全。
保证数据的安全性。
控制输出内容。要过滤输出的内容,解决浏览器安全问题。
解决问题
输入和输出的很多问题,都可以通过Aop的思想来统一解决。尽量让应用的问题都通过架构去实现,以避免因为开发人员因素,而且对正常业务是透明、不可见的。
人为的因素,需要有代码评审流程,甚至需要安全的软件构建流程去规避。
应用安全
千万不要用root!!!启动程序。
运行的用户不允许对源代码有修改的权限。
需要有新文件生成的目录(比如文件上传,动态代理等),不能有执行的权限。
不允许用户访问目录。基于tomcat来说,把所有的视图文件(jsp、ftl等)放到WEB-INF下。webapp下不直接放任何文件。
控制输入内容
用户所有的输入,都可以认为是不安全的。千!万!不!要!以为用户的输入是合法的。要采取防御式的方式去处理应用。确保应用的安全。一般我们提倡的是:防御式架构和防御式编程。
控制http参数
千万不要乱用数据类型。使用基本数据类型,少用包装类。包装类容易被攻击。不要用String去接受所有类型数据。原则上:是什么类型就用什么类型去接收。
通过架构设计,添加一层设置处理http参数(验证数据的类型、合法性、长度和范围)。一般都是通过aop来实现。比如:对邮件、手机的验证,对非法数字(小于0)的验证,对整数最大值的验证,对字符串最大长度的验证等。
文件上传
控制文件类型,通过后缀控制。上传文件的后缀要使用白名单,不要使用黑名单。只允许我们知道的文件类型上传。这样能确保安全性。
控制文件的大小。文件大小必须控制,否则容易出现系统硬盘资源被吃满。
上传的文件要压缩。这样就算里面有攻击的代码也会被破坏掉。
上传的文件名要随机、而且没有规律。可以考虑uuid。否则容易被猜测,然后把文件拖走。
sql注入
通过框架的参数化去解决。
要有严格的规范以及日常的代码评审。人为的因素,往往是很多安全问题的罪魁祸首。
要严格规划应用对数据库操作的用户。只允许有查看和修改数据的权限。就算是出了安全问题,也能把问题减少到最低,比如:至少避免被攻击者直接drop database.
html注入
通过架构的方法,净化。实现思路aop。
在http到执行方法前,把标签净化掉。如果确实有需要富文本的地方,一定也要使用白名单的方式,只允许少数合法标签,其他的也全部净化。
java有一个开发框架是:Anti-Samy,或者自己通过正则来实现。
数据敏感词
通过架构的方法,分词、词库去解决。实现思路aop。
可以根据敏感的程序来判断处理机制。
如果程度一般,则可以通过**来替换。
如果程度太高,涉及黄或者国家安全等,则可以拒绝输入。
保证业务的安全
每一个业务都要考虑是不安全的。然后都应该有对应的处理机制。
防止暴力破解
暴力破解是一种非常容易被忽视的安全问题。
这种问题的解决思路:
提升密码复杂度。太简单的密码要拒绝。
记录验证频率。超过这个频率就拒绝。
比如:登录,短信验证码,支付密码等用户核心安全业务。
不安全的直接对象引用
不安全的直接对象引用 ,即访问不属于自己的业务。
在业务设计的时候要明确哪些是允许其他用户访问的,其他的都不允许访问。还是根据最小原则来处理。
比如:不访问访问别人的订单信息。
不要信任用户输入的数据
重要的信息,千万不能通过让用户传输过来。千万不能自认为这些用户不会输入啊,都是我们设置好的。
比如:订单的金额,是否有操作的权限等。
严格的权限控制
水平权限控制。用户是否有操作业务的操作。比如,用户对应的角色和身份不允许访问指定的业务。
垂直权限控制。用户是否按指定的业务流程操作。比如,在一些流程过程中需要先有合同才能进货,在一些流程中需要先填写个人信息才能使用后面的功能。
保证数据的安全
互联网的时代,数据也是极为重要的资源。
不可以预见性
对于重要资源,要随机性,要不然容易被测试到规则,全部拖走。
比如用户外页信息 /home/x.html。这里的x用的是数字。
控制资源访问的频率
比如,只允许同一个ip访问100次每天。这个规则,可以根据产品或者运营来共同制定。实现思路:通过aop
记录数据操作记录
重要的信息操作的时候,要有记录。实现思路:通过aop。
控制输出内容
输出的内容确保是干净的,对用户不会有危险的。同时也不会泄露服务器的信息。
过滤敏感信息
把代码的注释去除。通过aop实现。
拒绝服务器相关的信息,比如ip。这个需要在代码评审的时候核实。不能有任何硬编码泄露服务器信息的地方。
异常不要说的太明确。每个异常都是要处理的。如果不清楚的异常,提示模糊信息即可,然后把明确的信息记录到日志。 通过aop实现
验证方法
通过ibm appscan工具验证。能解决常见的安全问题
目录遍历。御剑。
web后台暴力破解。httprint。
更牛B的解决方案
云WAF发展的新道路。感兴趣的看参考资料。感觉棒棒哒,果断还是验证了那句经典的话重复就会被解决。
参考资料
发表评论
-
Connected to the target VM, address: '127.0.0.1:52445', transport: 'socket' 错误:
2018-01-16 17:23 4767把 C:\Program Files (x86)\JetBra ... -
activemq Unrecognized Windows Sockets error: 10106: Socket creation failed
2018-01-16 17:27 95330-Nov-2017 22:45:52.892 严重 [ma ... -
Twitter的分布式自增ID算法snowflake (Java版)
2017-04-06 10:59 551概述 分布式系统中, ... -
gd总结20170104
2017-01-04 12:13 3381:tree获取选中的值,天窗项目-告警列表 $(functi ... -
java调优20161229
2016-12-29 20:03 4431:尽量减少对变量的重复计算 明确一个概念,对方法的调用,即 ... -
java2,8,10,16进制转换
2016-12-19 19:34 501A、十进制转换其他 十进制转成二进制 Integ ... -
java 修饰符
2016-12-06 22:20 408Java中共有四种访问限制修饰符:private,public ... -
java集合总结20161203
2016-12-03 15:26 5171:list 有序集合,元素 ... -
java常用集合总结
2016-12-03 14:55 532java常用集合总结 1、线程安全 线程安全就是说多线程访 ... -
设计模式总结1
2016-12-03 14:50 5831:像上转型================= 1.1定义抽象 ... -
pinyin4j
2016-12-02 15:40 423package cn.com.iotrust.common.u ... -
java IO流学习总结
2016-11-11 17:54 463Java中的流,可以从不同 ... -
JAVA泛型
2016-11-08 23:00 540泛型就是变量类型的参数化。在使用泛型前,存入集合中的元素可以是 ... -
Java常见集合的归纳总结
2016-11-08 21:58 503Java常见集合的归纳总结 首先来看看集合的关系: C ... -
maven总结20160925
2016-09-25 09:45 6741:安装后查看maven版本 mvn -version(或者 ... -
HTTP请求原理介绍
2016-09-20 19:19 618HTTP(HyperText Transfer Protoco ... -
post和get的区别
2016-09-10 22:35 4341. get是从服务器上获取数据,post是向服务器传送数据。 ... -
mysql 生成一个临时日历表
2016-08-26 13:32 1007begin declare indexdate DATE; s ... -
tomcat内存设置
2016-08-18 17:46 370tomcat内存设置 -------------------- ... -
页面图表显示
2016-08-05 11:15 5631:百度echarts http://echarts.baid ...
相关推荐
总的来说,"Java——应用技术"涵盖的范围非常广泛,从Web服务到移动应用,从企业级解决方案到大数据处理,再到云计算,Java都在其中发挥着重要作用。无论你是初学者还是经验丰富的开发者,深入学习和掌握Java应用...
Java Web开发是构建互联网应用程序的重要领域,它涵盖了服务器端编程、网页交互以及数据库管理等多个方面。本主题将深入探讨Java Web开发的核心基础知识,帮助你全面理解这一技术的内在机制。 一、Java Web 开发...
【Java Web项目——51商城】是一个典型的电子商务平台开发实例,它主要涵盖了Java技术栈在Web开发中的应用。在这个项目中,我们不仅会涉及到后端服务的开发,还会接触到前端界面的设计与实现。以下是这个项目可能...
《精通NetBeans——Java桌面、Web与企业级程序开发详解》是一本专为Java开发者设计的深入指南,它详尽地介绍了如何利用NetBeans IDE进行高效且高效的编程工作。NetBeans是一个开源的集成开发环境(IDE),广泛用于...
《Java Web开发实践教程——从设计到实现(第2版)》是一本深入探讨Java Web技术的权威指南,尤其适合初学者和有一定基础的开发者。本教程通过PPT的形式,以直观、易懂的方式讲解了从项目规划到实际开发的全过程。在...
综上所述,“Java Web应用教程——网上购物系统的实现”不仅涵盖了Java Web应用的基础知识,还深入探讨了如何设计和构建一个功能完备、性能卓越、安全可靠的网上购物系统。这对于学习Java Web开发或是准备搭建电子...
Java Web技术在企业级应用开发中占据着核心地位,尤其在构建企业门户网方面表现出强大的灵活性和可扩展性。企业门户网通常集成了多个业务系统,提供统一的登录入口,个性化信息展示,以及各种服务的快捷访问。这个...
在本文中,我们将深入探讨Java Web技术在人脸匹配领域的应用。这个特定的项目是一个Java Web小Demo,旨在演示如何在Web环境中实现人脸识别和匹配的功能。通过这个实例,开发者可以了解到如何将深度学习和计算机视觉...
在"09_Java Web——Request&Response案例"这个主题中,我们聚焦于HTTP请求和响应这两个核心概念,它们是Web应用中客户端与服务器交互的基础。下面将详细阐述相关知识点。 1. **HTTP协议**:超文本传输协议(HTTP)...
6. **Web安全**:包括身份验证、授权、防止SQL注入和跨站脚本攻击等,这些都是开发安全Web应用不可忽视的部分。 7. **服务器与容器**:Tomcat、Jetty等Servlet容器的使用,以及如何在这些环境中部署和管理Java Web...
《MLDN——Java Web开发实战经典源码笔记(基础篇)》是一本专注于Java Web开发的实战教程,旨在帮助读者从零开始掌握Web应用的开发技术。这本书通过深入浅出的讲解和丰富的实例代码,全面介绍了Java Web开发的基础...
《Java WEB——人事管理系统》 Java WEB技术在企业级应用中占据着重要的地位,尤其在构建人事管理系统这类业务逻辑复杂的系统时,其优势尤为明显。本文将深入探讨Java WEB技术在人事管理系统中的应用,以及相关的...
《Java Web开发基础——从Servlet到JSP》是一本深入探讨Java Web开发的教程,主要涵盖了从基础的Servlet到高级的JSP技术。这个压缩包包含的源代码是该书教学内容的实践部分,旨在帮助读者更好地理解和应用所学知识。...
**REST(Representational State Transfer,表述性状态转移)**是一种软件架构风格,广泛应用于Web服务的设计,特别是互联网应用程序。REST风格的架构强调简洁、高效和可扩展性,它基于HTTP协议,利用其固有的方法...
Java EE(Enterprise Edition)是一个基于 Java 语言的企业级应用程序开发平台,旨在帮助开发者快速构建可扩展、可靠、安全的企业级应用程序。Java EE 平台的版本有三个:Java SE、Java ME 和 Java EE。其中,Java ...
5. **安全与监控**:安全性和监控对于任何Web应用都至关重要。书中会介绍如何在Tomcat中实现用户认证、授权,以及如何通过日志监控和JMX管理工具来监控服务器状态。 6. **框架集成**:现代Java Web开发常常涉及...
1. **Java Web**:Java Web是使用Java技术开发Web应用程序的领域。它包括了Servlet、JSP(JavaServer Pages)、JavaBean等技术,用于创建动态、交互式的Web应用。 2. **Servlet**:Servlet是Java编程语言中的一个...
《精通JAVA——JDK》是一本深度探讨Java编程语言及其开发工具集JDK的专业教程,旨在帮助Java开发者提升技能,实现技术的精进。作为Java的基石,JDK(Java Development Kit)是学习和开发Java应用程序必不可少的工具...