Java 学习笔记(五)

news2024/10/8 14:15:43

CSRF攻击

CSRF攻击,全称为Cross-Site Request Forgery(跨站请求伪造),是一种常见的网络攻击方式。它利用网站对用户浏览器的信任,诱使用户在不知情的情况下发送恶意请求。这类攻击通常发生在用户已经通过身份验证的Web应用上,攻击者通过诱使用户在另一个网站执行操作,而该操作实际上是以用户的身份在目标网站上进行的。

CSRF攻击的原理

CSRF攻击的基本原理是攻击者诱使已经登录的用户(例如在银行网站上)在不知情的情况下执行攻击者预设的操作。例如,用户在没有登出银行网站的情况下,在另一个标签页中访问了攻击者的网站。攻击者的网站包含了一个请求,该请求指向银行网站并试图执行一个操作(如转账)。因为用户的浏览器仍然保持与银行网站的会话,所以这个请求会带上用户的认证信息(如cookie),使得请求看起来是合法的。

CSRF攻击的方式

CSRF攻击可以通过多种方式实现,包括但不限于:

  1. GET请求攻击:攻击者可以在恶意网页中嵌入一个隐藏的标签,其src属性指向一个包含恶意请求的URL。当用户访问该恶意网页时,浏览器会自动加载这个标签,从而向目标网站发送GET请求。
    POST请求攻击:攻击者可以使用JavaScript构建一个隐藏的表单,并通过JavaScript自动提交该表单,从而向目标网站发送POST请求。
  2. 链接攻击:攻击者可以构建一个看似无害的链接,并诱导用户点击。链接的URL可能包含恶意请求,当用户点击链接时,浏览器会向目标网站发送请求。
CSRF攻击的防范措施

为了防止CSRF攻击,可以采取以下措施:

  1. 使用CSRF Token:最常见的防范措施是在表单中添加一个CSRF Token,这是一个随机生成的令牌,服务器在渲染表单时生成并验证。当表单提交时,服务器会检查CSRF Token的有效性,以确保请求是合法的。
  2. 验证HTTP请求的来源:服务器可以检查HTTP请求的来源地址(如Referer头),以确保请求来自预期的来源。然而,这种方法并不总是可靠的,因为Referer头可以被伪造或删除。
  3. 设置SameSite Cookie属性:SameSite Cookie属性可以防止浏览器在跨站点请求中发送Cookie。当设置SameSite属性为Strict或Lax时,浏览器将不会在跨站点请求中发送Cookie。
  4. 使用HTTPS:确保所有通信都通过安全的HTTP(HTTPS)进行,以避免中间人攻击。
  5. 实施内容安全策略(CSP):CSP可以帮助减少XSS(跨站脚本)的风险,从而间接减少CSRF攻击的风险。

综上所述,CSRF攻击是一种利用网站对用户浏览器的信任执行未授权操作的攻击手段。通过合理的安全策略和编程措施,可以有效地防止这种攻击。

AuthenticationEntryPoint

AuthenticationEntryPoint是Spring Security Web中的一个关键接口,用于处理认证失败或者未认证的请求。当用户尝试访问受保护的资源而未经过身份验证,或者身份验证失败时,该接口会被触发。 以下是对AuthenticationEntryPoint的详细介绍:

接口定义

AuthenticationEntryPoint接口定义了一个方法:

void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException;
参数解释
HttpServletRequest request:表示遇到认证异常的用户请求。
HttpServletResponse response:表示将要返回给客户端的响应。
AuthenticationException authException:表示认证过程中抛出的异常,包含了认证失败的具体原因。

方法作用:实现该方法时,应根据需要修改ServletResponse的标头或状态码,以开始身份验证过程或向用户展示相应的错误信息。

主要作用

AuthenticationEntryPoint的主要作用是:

  1. 处理未认证请求:当用户未经过身份验证就尝试访问受保护的资源时,AuthenticationEntryPoint会被调用,以引导用户进入认证流程或显示错误信息。
  2. 处理认证失败:当用户的身份验证失败时,AuthenticationEntryPoint同样会被调用,以处理认证失败的情况,例如重定向到登录页面或显示认证失败的消息。
内置实现类

Spring Security为AuthenticationEntryPoint提供了多种内置实现类,以适应不同的认证需求:

  1. Http403ForbiddenEntryPoint:设置响应状态码为403 Forbidden,并不触发真正的认证流程,通常用于预验证已拒绝用户请求的情况。
  2. HttpStatusEntryPoint:允许设置特定的HTTP状态码作为响应,但并不触发认证流程。
  3. LoginUrlAuthenticationEntryPoint:根据配置计算出登录页面的URL,并将用户重定向到该登录页面以开始认证流程。
  4. BasicAuthenticationEntryPoint:对应标准HTTP Basic认证流程的触发动作,向响应写入状态码401和WWW-Authenticate头部,触发浏览器进行Basic认证。
  5. DigestAuthenticationEntryPoint:类似于BasicAuthenticationEntryPoint,但对应的是HTTP Digest认证流程。
  6. DelegatingAuthenticationEntryPoint:作为代理,根据请求的特性(如URL模式)委托给不同的AuthenticationEntryPoint处理。
自定义实现

开发者可以根据实际需求自定义AuthenticationEntryPoint的实现。例如,在自定义实现中,可以记录认证失败的日志、发送特定的错误消息给用户、或者执行其他与认证失败相关的操作。

配置方式

在Spring Security的配置中,通常需要通过HttpSecurity的exceptionHandling()方法来配置AuthenticationEntryPoint。例如:

@Override  
protected void configure(HttpSecurity http) throws Exception {  
    http  
        // ... 其他配置 ...  
        .exceptionHandling(exception -> exception.authenticationEntryPoint(new CustomAuthenticationEntryPoint()))  
        // ... 其他配置 ...  
}  
  
@Component  
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint {  
    @Override  
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {  
        // 自定义的认证失败处理逻辑  
    }  
}

通过这种方式,可以将自定义的AuthenticationEntryPoint集成到Spring Security的认证流程中,以实现灵活的认证失败处理机制。

@PreAuthorize

@PreAuthorize是Spring Security框架中用于在方法级别进行访问控制的注解。以下是对@PreAuthorize注解的详细介绍,包括其参数、使用案例等:

@PreAuthorize注解概述

@PreAuthorize注解是Spring Security提供的一种权限控制方式,它允许开发者在方法执行前对用户进行访问控制。通过在方法上添加@PreAuthorize注解,并传入一个表达式作为参数,可以指定哪些用户可以访问该方法。当用户访问被@PreAuthorize注解修饰的方法时,Spring Security会根据表达式的计算结果来决定是否允许访问。

@PreAuthorize注解的参数

@PreAuthorize注解的参数是一个SpEL(Spring Expression Language)表达式,用于定义权限规则。SpEL支持在表达式中使用各种功能,包括方法调用、条件判断等。表达式的结果应该是布尔值,如果为true,则允许方法调用;否则,抛出AccessDeniedException异常,阻止方法执行。

@PreAuthorize注解的使用案例

基于角色的访问控制
使用hasRole(‘ROLE_NAME’)表达式来检查用户是否具有指定角色。
示例代码:

@PreAuthorize("hasRole('ROLE_ADMIN')")  
public void adminOperation() {  
    // 实现管理员操作的代码  
}

在上面的代码中,只有具有ROLE_ADMIN角色的用户才能调用adminOperation方法。

基于权限的访问控制
使用hasAuthority(‘AUTHORITY_NAME’)表达式来检查用户是否具有指定权限。
示例代码:

@PreAuthorize("hasAuthority('READ_PRIVILEGE')")  
public void readOperation() {  
    // 实现读取操作的代码  
}

在上面的代码中,只有具有READ_PRIVILEGE权限的用户才能调用readOperation方法。

基于方法参数的访问控制
在表达式中,可以引用方法的参数,并使用逻辑运算符构建更复杂的权限规则。
示例代码:

@PreAuthorize("#id < 10")  
public User findUserById(int id) {  
    // 根据id查找用户  
}  
  
@PreAuthorize("principal.username.equals(#username)")  
public User findUserByUsername(String username) {  
    // 根据用户名查找用户,仅允许查询当前用户的信息  
}

在上面的代码中,findUserById方法只允许查询id小于10的用户,而findUserByUsername方法只允许查询当前用户的信息。

结合OAuth2的访问控制
在使用OAuth2进行认证和授权时,可以使用#oauth2.hasScope(‘scope’)表达式来检查OAuth2令牌是否具有指定范围(scope)的权限。
示例代码:

@PreAuthorize("#oauth2.hasScope('server') or #name.equals('demo')")  
@RequestMapping(path = "/{name}", method = RequestMethod.GET)  
public Account getAccountByName(@PathVariable String name) {  
    // 根据名称查找账户  
}

在上面的代码中,只有当OAuth2令牌具有server范围的权限或者请求的name参数等于"demo"时,才允许访问getAccountByName方法。

注意事项

启用方法级别的安全性:要在Spring Security的配置类中启用方法级别的安全性,需要添加@EnableGlobalMethodSecurity(prePostEnabled = true)注解。
表达式的灵活性:SpEL表达式非常灵活,可以包括用户的角色、权限等信息,也可以进行逻辑运算和条件判断。因此,开发者可以根据实际需求构建复杂的权限规则。
异常处理:当用户没有通过@PreAuthorize注解的权限验证时,系统会抛出AccessDeniedException异常。开发者可以在全局异常处理中捕获该异常,并返回相应的错误信息给用户。
综上所述,@PreAuthorize注解是Spring Security框架中用于控制方法访问权限的重要工具。通过合理使用@PreAuthorize注解,开发者可以实现细粒度的权限控制,从而保护系统的安全性。

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

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

相关文章

工行企业网银U盾展期后有两个证书问题的解决方法

工行企业网银U盾证书快到期后&#xff0c;可以自助展期&#xff0c;流程可以根据企业网银提示页面操作。操作后&#xff0c;可能存在两个新旧两个证书并存的情况&#xff0c;致使网银转账等操作失败&#xff0c;如图&#xff1a; 其原因是新证书生成后&#xff0c;旧证书没有删…

wsl配置图形显示环境 no $display environment variable

wsl运行fsl&#xff0c;安装好之后&#xff0c;可以使用bet&#xff0c;等命令行进行操作&#xff0c;但是不能使用fsl呼出窗口。 因为 wsl并不像原生linux具有destop桌面&#xff0c;它只有命令行。所以当运行fsl的时候会报错&#xff0c; application-specific initializat…

裁掉数千人、把工作外包给 AI!一年多后,这家巨头的 CEO恳求无人搭理

“对&#xff0c;裁掉几千名员工。” “好的&#xff0c;头儿。” “很好&#xff0c;那么这个人工智能可以做那些前雇员能做的一切事情&#xff1f;” “不&#xff0c;不全是。” “等等&#xff0c;什么&#xff1f;” “你刚刚裁掉的几百人都是硬件工程师&#xff0c;…

k8s的pod的管理和优化

资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管理kubernetes。 kubernetes的本质上就是一个集群系统&#xff0c;用户可以在集群中部署各种服务 所谓的部署服务&#xff0c;其实就是在kubernetes集群中运行一个个的容器…

Kubernetes--深入理解Pod资源管理

文章目录 kubectl --helpapi-resourcesapi-versionskubectl explain ... API资源资源规范PodServiceConfigMapSecret 显示资源删除资源详细描述RESTful API Pod资源管理Pod的核心概念Pod资源配置了解Pod运行状况Kubectl get pods xxxxkubectl describe pods xxxkubectl logs -f…

如何彻底掌握 JavaScript 23种设计模式

设计模式是解决特定问题的常用解决方案&#xff0c;它们可以帮助开发者编写更清晰、可维护、可扩展的代码。在 JavaScript 中&#xff0c;常见的设计模式可以分为三大类&#xff1a;创建型模式、结构型模式 和 行为型模式。本文将全面介绍 JavaScript 中常见的设计模式&#xf…

性能剖析利器-Conan|得物技术

作者 / 得物技术 - 仁慈的狮子 目录 一、背景 1. 局限性 2. 向前一步 二、原理剖析 1. 系统架构 2. 工作模式 3. reporter 三、稳定性验证 四、案例分析 五、写在最后 一、背景 线上问题的定位与优化是程序员进阶的必经之路&#xff0c;常见的问题定位手段有日志排查、分布式链…

脑机接口技术的未来与现状:Neuralink、机械手臂与视觉假体的突破

近年来&#xff0c;脑机接口&#xff08;BCI&#xff09;技术发展迅速&#xff0c;不仅限于科幻小说和电影&#xff0c;已经逐步进入现实应用。特别是马斯克的Neuralink公司推出的“盲视&#xff08;Blindsight&#xff09;”设备&#xff0c;最近获得了FDA的突破性设备认定&am…

IEC104规约的秘密之八----应用任务优先级

所谓应用任务优先级&#xff0c;就是同时出现不同的应用任务时&#xff0c;优先发哪个报文。这里有一个表格&#xff0c;可以做为参考&#xff0c;一般是在子站来实现&#xff0c;子站是数据提供方&#xff0c;需要对各种任务的优先级进行排序&#xff0c;以满足应用的实际需要…

为什么Linux系统下的程序无法在Windows下运行

两个系统的格式不同&#xff0c;格式就是协议&#xff0c;是在固定位置有意义的数据。Linux下可执行文件格式是elf&#xff0c;可使用readelf查看elf文件头 而Windows下的可执行程序是PE格式&#xff0c;是一种可执行文件。 还有一点是Linux下和Win下系统API不同&#xff0c;这…

【CSS】houdini自定义CSS属性实现渐变色旋转动画

现有一段代码&#xff0c;在不旋转整个元素的前提下&#xff0c;渐变背景无法应用动画 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…

基于 TOSHIBA eFuse 应用电路(带热关断功能)设计方案

近年来各类消费产品&#xff0c;存储设备&#xff0c;服务器等电路变得越来越密集&#xff0c;越来越灵敏&#xff0c;因此保护功能变得越来越重要&#xff0c;我们开发了是用于过流保护和过温保护的参考设计解决方案。 将介绍参考设计中的两种电路&#xff0c;合在一起2CM*2CM…

jetlinks物联网平台学习5:dtu设备接入及温度报警场景联动

dtu设备接入及温度报警场景联动 1、平台端配置1、新建协议2、新建网络组件3、设备接入网关配置4、新增产品5、导入产品物模型6、新增设备7、场景联动配置7.1、触发规则7.2、触发条件7.3、执行动作 2、平台端验证场景联动 1、平台端配置 下载三个文件 https://hanta.yuque.com…

详解 SPI 机制

SPI(Service Provider Interface) 是 JDK 内置的一种服务提供发现机制&#xff1a;可以用来启用框架扩展和替换组件&#xff0c;主要用于框架中开发。例如&#xff1a;Dubbo、Spring、Common-Logging&#xff0c;JDBC 等都是采用 SPI 机制&#xff0c;针对同一接口采用不同的实…

RTOS系统移植

一、完成系统移植 系统移植上官网寻找合适的系统包&#xff0c;下载后将文件移植入工程文件 二、创建任务句柄、内核对象句柄&#xff08;信号量&#xff0c;消息队列&#xff0c;事件标志组&#xff0c;软件定时器&#xff09;、声明全局变量、声明函数 三、创建主函数&#…

Stable Diffusion绘画 |,IP角色多视图生成技巧(附插件模型)

在游戏设计、小说推文、角色设计里面&#xff0c;很多场景都运用到IP角色的多视图。 人物角色多视图 第1步&#xff0c;输入提示词&#xff1a; 第2步&#xff0c;由于要在同一张图片中生成多角度的并排展示&#xff0c;需要修改图片的分辨率&#xff08;尤其是宽度&#xff…

开源问答类知识付费网站源码系统 带完整的安装代码包以及搭建部署教程

系统概述 近年来&#xff0c;随着互联网的飞速发展&#xff0c;知识付费市场呈现出爆炸式增长。各大知识付费平台如雨后春笋般涌现&#xff0c;涵盖了从教育、科技到生活娱乐等各个领域。用户通过付费获取高质量的知识内容&#xff0c;而内容创作者则通过分享知识获得经济回报…

大模型应用探讨,免费AI写作、一键PPT、免费PDF百种应用、与AI对话

大模型应用平台知识普及, 应用可见评论区 我们生活在一个充满无限可能的数字时代&#xff0c;人工智能技术正在推动着各种创新的边界。大模型应用平台一般包含以下功能。 ## 1. 一键生成论文 写作是学生、研究人员和职场人士都无法避免的任务。大模型应用平台拥有强大的文本生…

如何让算法拥有“记忆”?一文读懂记忆化搜索

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 什么是记忆化搜索 二 相关题目练习 2.1 斐波那契数&#xff08;详解记忆化搜索&#xff09; ​编辑 解法一&#xff08;递归&#xff09;&#xff1a; 解法二&#xff08;记…

全面整理人工智能(AI)学习路线图及资源推荐,非常详细收藏我这一篇就够了

在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;掌握AI技术已经成为了许多高校研究者和职场人士的必备技能。从深度学习到强化学习&#xff0c;从大模型训练到实际应用&#xff0c;AI技术的广度和深度不断拓展。作为一名AI学习者&#xff0c;面对浩瀚的知识海…