14.安全

1.基本概念

     安全问题的产生:

互联网作为商业交易的工具快速发展,越来越多的公司提供网络交易服务。很多商业活动在网上进行当前,成千上万的网民在网上进行各种活动的同时,也在网上传递其个人信息每天在网上发生各种各样的商业活动,如银行交易、股票交易等为了支持这些应用,我们需要一个健壮、安全的互联网保障机制。电子商务没有安全的保障是不可能的。

随着公司、个人对其资源和隐私的重视度的增加,网络安全的重要性也日益突出
Servlet规范提供了方法和途径来实现Web应用程序的安全,在讨论实现安全特性之前,先了解以下与安全相关的基本概念
认证
授权
数据完整性
数据私密性
审核
恶意代码
网站攻击

认证:

安全的第一个基本要求就是用户认证
认证是一个鉴别用户、确认身份的过程,这意味着校验用户是否是其所宣称的身份
例如:用户名和密码
是否存在该用户
提供的用户名是否与其密码相符

授权:

用户认证通过,必须被授权

授权是一个决定用户是否允许访问特定资源的过程

例如:普通用户不可以进行后台管理功能

 

授权通常被维护在一个访问控制列表(ACL)中,这个列表指定了用户及其可以访问的资源

数据完整性:

数据完整性是一个确保数据从发送端到接收端不受到损害的过程

例如:如果用户发送一个从其账户转出1000元的请求,银行系统应该确保转出的金额是1000元而不是10000元

数据完整性通常由伴随数据一起发送的一个数字签名来保证。在接收端,数据签名获得校验。

数据私密性:

  数据私密性是确保只有数据合法访问者可以访问敏感信息的过程。如:用户发送用户名和密码登录网站时,如果这些信息以原始格式发送,在互联网上传输时,网络黑客完全可能通过监听HTTP数据包窃取这些敏感信息。在这种情况下,数据无法保证其机密性。

 

审核:

审核是记录系统中与安全相关的事件,确保对每个用户的行为有据可查
审核能追踪到系统发生安全问题的原因,通常是由应用程序产生的日志文件来完成。

恶意代码:

将引起计算机系统损害的一段代码称作恶意代码
典型的恶意代码包括病毒、蠕虫和木马等
有时系统开发者在编写程序时会留下一个后门漏洞,这是一个潜在的误用机会,也称为恶意代码
尽管我们不能防止不知名程序员的恶意代码,但对于内部程序员的一对一审查则可以杜绝系统后门漏洞

网站攻击:

任何认为有价值的事物均是潜在受攻击目标,应受到保护。网站是最易遭到攻击的目标。网站的价值在于其所包含的信息以及其给合法用户提供的服务
一般存在3种类型的网站攻击
安全攻击
伪装攻击
服务攻击

一般存在3种类型的网站攻击
安全攻击:通过监听两台机器间的通信来窃取机密信息,通过加密传输数据可防止此类攻击,如使用HTTPS协议进行信道加密
伪装攻击:通过改变传输的信息来达到恶意企图。如伪装IP地址,使用使服务器IP地址发消息给服务器。通过健全的认证机制可以防止此种攻击
服务攻击:发送大量假请求使得系统无法有效处理合法的请求,这种伪造的大量假数据包可以使网络堵塞。通过使用防火墙限制端口和控制网络通信量,可以防止此类攻击

2.认证机制

Servlet规范定义了4种认证机制:
HTTP基本认证
HTTP摘要认证
HTTPS客户端认证
HTTP表单认证
以上4种认证都是基于用户名/密码机制,由服务器维护一个所有用户名和密码的列表,并且保护该列表资源

 HTTP基本认证:

HTTP基本认证的优点
非常容易构建
所有浏览器均支持
HTTP基本认证的缺点
安全性不能保证,因为用户名和密码未加密(注意:Base64编码不是加密方法。sun.misc.Base64 和sun.misc.Base64Decoder类可对字符串编码和解码)
无法定制与应用程序相匹配的用户名和密码对话框外观。

 

HTTP摘要认证:

HTTP摘要认证是在基本认证的基础上密码是加密发送
HTTP摘要认证的优点
比HTTP基本认证安全
HTTP摘要认证的缺点
仅由微软的IE浏览器支持。因为规范没有对HTTP摘要认证强制,所以许多Servlet容器不提供支持

 

HTTP客户认证:

HTTPS就是构建在安全套接字(Secure Socket Layer,SSL)之上的HTTP,
SSL是网景公司开发的,用于确保互联网上传输敏感数据私密性的协议。所有被传输的数据采用公开密钥的加密方式
HTTPS客户认证的优点
是4种认证中最安全的
被所有浏览器支持
HTTPS客户认证的缺点
需要认证中心颁发的认证书
实现、维护该认证具有较高成本

 

HTTP表单认证:

HTTP表单认证与基本认证很相似。但未使用浏览器弹出对话框,而是使用一个HTML的表单来获取用户名和密码。
开发都必须创建一个包含表单的HTML页面,并可以定制表单外观。Form表单的唯一要求就是其action属性必须取值为j_security_check,并提供两个文本域用于输入用户名和密码(j_username, j_password),除此强制要求外,其他事务均可由开发者自定义
HTTP表单认证的优点
非常容易建立
所有浏览器均支持
可以定制登录窗体的外观
HTTP表单认证的缺点
不安全,因为用户名和密码未加密
只有在使用Cookie维持会话时,才可以使用

定制认证机制:

<tomcat-users><user username="tomcat" password="tomcat" roles="tomcat"/>  <user username="role1" password="tomcat" roles="role1"/><user username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users>

 

权限分配给角色而不是实际用户
<tomcat-users><user username="tomcat" password="tomcat" roles="tomcat"/>  <user username="role1" password="tomcat" roles="role1"/><user username="both" password="tomcat" roles="tomcat,role1"/><user username="john" password="jjj" roles="employee"/>  <user username="mary" password="mmm" roles="employee"/>  <user username="bob" password="bbb" roles="employee,supervisor"/> 
</tomcat-users>
在web.xml中定义认证机制
在指定具体认证用户前,要配置用户名和密码,这个步骤取决于具体的Servlet容器
Tomcat服务器是在下面的文件中:<tomcat-root>/conf/tomcat-users.xml
<login-config><auth-method>FORM</auth-method><form-login-config><form-login-page>/formlogin.html</form-login-page><form-error-page>/formerror.html</form-error-page></form-login-config></login-config> 
 <login-config><auth-method>BASIC</auth-method></login-config> 

 3.安全声明

 

开发、部署、使用Web应用程序的通常是不同的人,这就要求开发者有能力非常容易的将Web应用安全需求移交给部署者,部署者也应该有能力定制安全的各个方面而不需要修改代码
Servlet容器允许我们在Web部署描述符中配置安全需求的细节

  jsp授权方式:

默认情况下,Web应用程序的所有资源允许被任何人访问
为了对资源进行保护,可以做以下工作来限制对资源的访问
Web资源集合:鉴别必须受保护的资源
授权限制:鉴别用户所分配的角色
用户数据限制:指定发送者和接受者之间传输数据的方式

  <security-constraint><web-resource-collection><web-resource-name>declarative security test</web-resource-name><url-pattern>/secure</url-pattern><http-method>POST</http-method></web-resource-collection><auth-constraint><role-name>supervisor</role-name></auth-constraint><user-data-constraint><transport-guarantee>NONE</transport-guarantee></user-data-constraint></security-constraint><login-config><auth-method>FORM</auth-method><form-login-config><form-login-page>/formlogin.html</form-login-page><form-error-page>/formerror.html</form-error-page></form-login-config></login-config> <security-role><role-name>supervisor</role-name></security-role>

4.安全编程

有时候仅采用声明的安全机制是不够的
例如:假设允许一个Servlet被公司所有员工访问,但是,针对管理层和普通员工该Servlet产生不同的输出。这在种情况下,Servlet规范允许Servlet拥有处理安全的代码,Servlet根据用户所扮演的角色产生相应的输出。

安全相关API

HttpServletRequest接口提供了3个方法用于识别用户和角色
String getRemoteUser()
如果用户通过认证,该方法返回用户的登录名称。否则返回null值
Principal getUserPrincipal()
该方法返回一个包含认证通过用户的java.security.Principal对象
Boolean isUserInRole(String rolename)
该方法用于判断用户是否是指定的角色

了解与安全相关的一些基本概念:认证就是鉴别用户,授权就是鉴别用户可以做什么,审核是记录用户的行为…
Servlet规范定义了4种认证机制
Servlet规范中安全声明与安全编程的概念与应用

 

转载于:https://www.cnblogs.com/Firesun/p/9753266.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言enum关键字

很多初学者对枚举(enum)感到迷惑&#xff0c;或者认为没什么用&#xff0c;其实枚举(enum)是个很有用的数据类型。一、枚举类型的使用方法 一般的定义方式如下&#xff1a;enum enum_type_name{ENUM_CONST_1,ENUM_CONST_2,...ENUM_CONST_n} enum_variable_name;注意&#xff1a…

Dubbo 需求、架构、使用Demo

只是整理下方便自己记录 内容全部来自官网&#xff1a;http://dubbo.io/books/dubbo-user-book/preface/usage.html 一、需求 在大规模服务化之前&#xff0c;应用可能只是通过 RMI 或 Hessian 等工具&#xff0c;简单的暴露和引用远程服务&#xff0c;通过配置服务的URL地址进…

Ubuntu安装之python开发

Ubuntu安装之python开发 什么&#xff1f;&#xff1f;Ubuntu(乌班图)开发&#xff1f;不会用&#xff1f;&#xff1f;怎么进行python开发&#xff1f;&#xff1f;&#xff1f; 乌班图操作系统下载地址&#xff1a;http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-…

vimdiff和vim-fugitive安装,使用教程

1、vimdiff的安装 在终端执行 git config --global merge.tool vimdiff git config --global merge.conflictstyle diff3 git config --global mergetool.prompt false git config --global diff.tool vimdiff git config --global difftool.prompt false git config --…

在 PowerPoint 2016 中嵌入网页

之前在智图这个网站上做了一张地图&#xff0c;在嵌入 PPT 里面的时候碰到了一些问题&#xff0c;现在把找到的解决方法写下来。 PPT 里面自带的 WebBrowser 控件可以实现网页浏览的功能。在“开发工具”选项卡下的“其他控件”中找到“Microsoft Web Browser”&#xff0c;在画…

js 正则表达式 整合

正则表达式:断言 取字符串区间: /(?<[" star "]).*(?[" end "])/// 简单封装 Vue.prototype.strMatch (str,star,end) > { let regs new RegExp("(?<[" star "]).*(?[" end "])"); let req str…

dubbo 注册中心zookeeper 手册

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 zookeeper 注册中心 Zookeeper 是 Apacahe Hadoop 的子项目&#xff0c;是一个树型的目录服务&#xff0c;支持变更推送&#xff0c;适…

数组 深入详解

再论C语言数组 C语言处理数组的方式是它广受欢迎的原因之一。C语言对数组的处理是非常有效的&#xff0c;其原因有以下三点&#xff1a;第一&#xff0c;除少数翻译器出于谨慎会作一些繁琐的规定外&#xff0c;C语言的数组下标是在一个很低的层次上处理的。但这个优点也有一个反…

oracle ins-30131错误

打开cmd 但是在我的环境没效果&#xff0c;而我已知临时目录没有问题。那么在命令行进入安装软件目录&#xff0c;通过命令行启动安装程序&#xff0c;设置 ignorePrereq 检查&#xff0c;此时数据库软件可以启动安装&#xff0c;是否会出现错误&#xff0c;就看忽略的检查是否…

iOS开发UI篇—简单介绍静态单元格的使用

一、实现效果与说明 说明&#xff1a;观察上面的展示效果&#xff0c;可以发现整个界面是由一个tableview来展示的&#xff0c;上面的数据都是固定的&#xff0c;且几乎不会改变。 要完成上面的效果&#xff0c;有几种方法&#xff1a; &#xff08;1&#xff09;可以直接利用代…

展示内容

今天课上展示了软件 评价为过于简单 还需另寻他法转载于:https://www.cnblogs.com/wmqlzm/p/10041683.html

dubbo ,dubbo-provider、dubbo-consumer 配置参数说明

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 dubbo:consumer 服务消费者缺省值配置。配置类&#xff1a; com.alibaba.dubbo.config.ConsumerConfig 。同时该标签为 <dubbo:refer…

laraval使用sqlite设置从多少开始递增

DB::statement( "UPDATE SQLITE_SEQUENCE SET seq 起始值 WHERE name 表名" ); sqlite3默认就是1。 新建了含PRIMARY KEY AUTOINCREMENT 主键自增表(如 test1)后&#xff0c;会自动在sqlite_sequence表插入或更新一条信息&#xff0c;其中保存了相关主键的最大值&…

指针深入探讨

C语言变量的内存实质 一、先来理解C语言中变量的实质 要理解C指针&#xff0c;我认为一定要理解C中“变量”的存储实质&#xff0c;所以我就从“变量”这个东西开始讲起吧&#xff01;先来理解理解内存空间吧&#xff01;请看下图&#xff1a; 如上图所示&#xff0c;内存只不…

springboot_yml配置

server: port: 8097 session-timeout: 30 tomcat.max-threads: 0 tomcat.uri-encoding: UTF-8 spring: application: name: feedback # 数据库配置 datasource: name: test #url: jdbc:mysql://192.168.0.180:3306/dsdb #url: jdbc:m…

Python 字符串查找子串的方法之 index() 和 find()

find(substr, beg0, endlen(string)): 在[beg, end]范围内查找substring&#xff0c;找到返回substr的起始下标&#xff0c;否则返回 -1。 1 string Hello Python 2 print(string.find(h, 0, len(string))) # 输出 9 3 print(string.find(thon) # 输出 84 print(strin.find(…

sqlite 设置向下递增

因为 sqlite是没有floor函数的 所以用 cast(x as int) - (x < cast(x as int)) 原理 cast(1.1 as int) 1 cast(-1.1 as int) -1&#xff08;我们想要的结果为2&#xff09; 如果x为非负 cast(x as int)是可以的 但是有负的话就加上后面 (x < cast(x as int))…

Docker 是什么,组成

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任…

VC6.0详细教程

1 编制并运行一个简单程序 1.1 编制并运行程序的“四步曲”1.2 工程(PROJECT)以及工程工作区(PROJECT WORKSPACE)1.3 启动并进入VC6的集成开发环境1.4 创建工程并输入源程序代码(1)新建一Win32 Console Application工程(2)在工作区窗口中查看工程的逻辑架构(3)在工程中新建C源…

vim搜索替换工具

1、ag.vim(查找工具)安装 在vimrc中添加 Plug rking/ag.vim 使用 :Ag 你要查找的内容 e open file and close the quickfix window. o open file (same as enter). go preview file (open but mainta…