首页 > 编程语言 >7 年的 web 编程生涯,今天系统整理学习web 安全学习笔记

7 年的 web 编程生涯,今天系统整理学习web 安全学习笔记

时间:2024-03-26 16:32:48浏览次数:34  
标签:web 场景 浏览器 编程 用户 恶意 学习 服务器 攻击方式

背景

说来惭愧,7 年的 web 编程生涯,一直没有真正系统的学习 web 安全知识(认证和授权除外),这个月看了一本《Web 安全设计之道》,书中的内容多是从微软官方文档翻译而来,这本书的含金量不高,不过也不能说没有收获,本文简单记录一下我学习 Web 安全方面的笔记。

本文不涉及 IIS、Windows 和 SqlServer 的安全管理与配置,尽量只谈编程相关的安全问题。

最简单的 Web 物理架构

您必须了解 HTTP 协议,可以阅读这篇文章:HTTP 协议详解,简单总结如下:

  • 浏览器和服务器的通信采用无状态的 HTTP 协议。
  • 通过控制 HTTP 的请求头,可以控制:客户端缓存、Cookie、请求编码、相应编码等。
  • 请求内容向服务器提交数据(POST 和 GET),响应内容向浏览器发送数据。
  • Cookie 包含在每个请求和响应中,因此客户端和服务器都可以访问到。
  • 一般使用 Cookie 来维护一个浏览器会话(也有其他方式)。

攻击方式总览

这里有一个一般性的介绍:网站安全。

Web 软件安全攻击防护

浏览器安全攻击

Cookie 假冒

定义

非期望的修改 Cookie 的值。

场景

服务器将用户的授权信息存储在 Cookie 中,然后客户端用这些 Cookie 决定导航的显示与否。如果有程序恶意的修改了 Cookie,会导致权限提升。

攻击方式

  • 注入的 Javascript 代码。
  • 使用浏览器调试工具。
  • 本机病毒等。

防护措施

  • 尽量将 Cookie 设置为 HttpOnly,浏览器伪造不了这种 Cookie。
  • 防止 Javascript 注入。
隐藏变量修改

定义

非期望的修改隐藏变量。

场景

订单的折扣计算完全依赖客户端的某个变量,这个变量是从服务器生成的,所有逻辑都在客户端计算,服务器只是接受最后的计算结果。如果有程序恶意的修改了变量,会绕过某些业务逻辑。

攻击方式

  • 注入的 Javascript 代码。
  • 使用浏览器调试工具。

保护措施

  • 防止 Javascript 注入。
  • 关键的功能不要依靠客户端控制,要采用服务器控制。
跨站脚本攻击

定义

恶意的提交 Javascript 代码。

场景

在博客的评论功能中,如果用户恶意的提交 Javascript 代码,假如这些 Javascript 没有被过滤,极端的情况下,这些代码会劫持所有访问此页面用户的会话,访问和修改任意数据。

攻击方式

  • 注入的 Javascript 代码。
  • 使用浏览器调试工具。

保护措施

  • 在服务器端验证和过滤恶意输入。
  • 开启 ValidateRequest=“true”。
  • 对输出使用 this.Server.HtmlEncode。

服务器安全攻击

缓冲区溢出

定义

某些可能输入会导致服务器堆栈溢出,这直接致使服务器不可用。

场景

程序提供了某项计算密集型的功能,此功能没有限制用户输入,用户在有意或无意之间输入了一个非法的值,导致了缓冲区溢出。

攻击方式

  • 非法输入。

保护措施

  • 在服务器端验证和过滤恶意输入。
  • 采用防伪式编程。
认证逃避

定义

某些 URL 没有出现在主页导航界面,系统只对导航页面进行了认证和授权管理,这些没有出现在导航中的 URL 可能被恶意用户给分析出来,直接进行访问。

场景

用户管理分为三个页面:List.aspx、New.aspx,程序只对 List.aspx 进行认证和授权了,某些用户直接访问 New.aspx 执行添加操作。

攻击方式

  • 直接地址访问。

保护措施

  • 梳理网站的整体结构,对所有页面进行认证和授权管理。
非法输入

定义

病从口入,祸从口出。很多攻击方式都是因为非法输入导致的。

场景

程序只在客户端对输入进行了验证,服务器未做任何验证,恶意的程序可以绕过客户端逻辑直接向服务器提交非法输入,这很容易导致各种安全问题。

攻击方式

  • 注入的 Javascript 代码。
  • 使用浏览器调试工具。

保护措施

  • 在服务器端验证和过滤恶意输入。
  • 防止 Javascript 注入。
授权逃避

定义

某些 URL 没有出现在主页导航界面,系统只对导航页面进行了认证和授权管理,这些没有出现在导航中的 URL 可能被恶意用户给分析出来,直接进行访问。还有一种可能是:系统只在客户端进行了授权管理,服务器代码并没有进行授权验证,恶意用户很容易就可以逃避授权。

场景

当用户没有 Create 权限的时候,系统只是禁用了浏览器按钮,并没有做服务器授权,然后用户使用浏览器调试工具启用了按钮,就可以执行 Create 了。

攻击方式

  • 直接地址访问。
  • 修改客户端代码。

保护措施

  • 梳理网站的整体结构,对所有页面进行认证和授权管理。
  • 在服务器进行授权管理。
SQL 注入

定义

对于和后台数据库产生交互的网页,如果没有对用户输入数据的合法性进行全面的判断,就会使应用程序存在安全隐患。用户可以在可以提交正常数据的 URL 或者表单输入框中提交一段精心构造的数据库查询代码,使后台应用执行攻击着的 SQL 代码,攻击者根据程序返回的结果,获得某些他想得知的敏感数据,如管理员密码,保密商业资料等。

场景

服务器程序使用字符串拼接的方式来构造 SQL 语句,这就会导致 SQL 注入攻击的可能。

攻击方式

  • 恶意的提交 SQL 片段。

保护措施

  • 在服务器端验证和过滤恶意输入。
  • 不要拼凑 SQL 参数,采用 DbParameter 设置参数。
  • 最小化 SQL Server 访问账户的权限。
异常敏感信息泄露

定义

未处理异常直接显示到浏览器,这会导致敏感信息被泄露,对最终用户来说,也会让他们感觉系统不够安全和易用。

场景

因为开发原因,在某些场景下浏览器将后端的异常直接显示给浏览器了,如:NullReferenceException 等。

攻击方式

  • 在调用的最上层,为处理掉全部异常。
  • 在调用的下层,为封装合适的异常信息。

保护措施

  • 定义合理的异常处理策略。
  • 异常一定不能跨越边界直接显示到浏览器。
上传攻击

定义

用户恶意的上传外挂、木马和其它程序等。

场景

你做了一个上传功能,结果对上传的文件没有做好足够的控制,比如:某些恶意的用户会上传一些恶意的脚本,然后执行这些脚本。

攻击方式

  • 上传恶意文件。

保护措施

  • 在服务器端验证和过滤恶意输入,如:后缀名限制。
  • 对上传后的文件进行扫描和杀毒。
抵赖

定义

某些用户由于某些原因,不愿意承认自己执行过某些操作,当然,某些操作可能是他们没有意识的情况下执行的。

场景

用户一不小心执行的删除操作,然后立即发现自己操作错误了,然后他打电话给售后,说系统有问题。

攻击方式

  • 界面引导不够友好,容易导致误操作,为了推卸责任,进行抵赖。
  • 用户恶意的执行操作,然后抵赖。

保护措施

  • 提高界面的易用性。
  • 关键操作的提醒要足够明显。
  • 所有操作要留下操作日志。

数据库安全攻击

连接字符串暴漏

定义

数据库连接字符串中包含用户名和密码,这些信息以明文的形式存储在配置文件中,运维和开发人员都能看得到,随着团队人员的流动,这些敏感信息也会暴漏。

场景

直接将连接字符串配置在 Web.Config 中,而这个文件没有被加密。

攻击方式

  • 未加密连接字符串。
  • 未加密配置文件。

保护措施

  • 加密连接字符串。
  • 加密配置文件。
存储数据泄露和篡改

定义

某些敏感信息最终需要被存储在数据库中,如果这些信息被存储为明文,会有很多人员可以看到这些信息,极端情况下,某些黑客攻陷了服务器,也可以看到这些数据。

场景

为加密密码、关键财务信息,税务局来查账了。

攻击方式

  • 未加密敏感数据。
  • 加密方法过于简单。

保护措施

  • 加密敏感数据。
  • 对某些数据采用不可逆加密,如:密码。
  • 对某些数据采用可逆加密,如:财务数据。

网络安全攻击

拒绝服务攻击

定义

恶意用户试图攻击服务器、网络和系统,最终的目的是让系统不可用,停止对外服务。

场景

恶意用户在尝试并发的无限制的向服务器发送请求,试图让服务器的负载达到最大,最终让系统停止对外服务。

攻击方式

  • 攻击网络。
  • 攻击服务器。
  • 攻击系统。

保护措施

  • 在程序级别,识别并拦截恶意的请求。
  • 购买第三方安全软件。
传输数组泄露、篡改

定义

恶意的代理服务器或路由器拦截用户的请求,读取或修改敏感数据。

场景

您在咖啡馆发现了一个免费的 WIFI,然后偷偷的接入了,您还暗自高兴,当您使用这个免费的 WIFI 进行网上冲浪的时候,您的各种信息都会被 WIFI 给拦截,如果是恶意的用户,结果可想而知。

攻击方式

  • 绑架路由器。
  • 免费 WIFI 骗局。
  • 为加密的传输协议。
  • 未加密的传输数据。

保护措施

  • 加强客户端路由的安全管理。
  • 慎重的选择代理服务器。
  • 使用安全的传输协议,如:SSL。

最后

为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,所有资料共282G,朋友们如果有需要全套网络安全入门+进阶学习资源包,可以点击免费领取(如遇扫码问题,可以在评论区留言领取哦)~

标签:web,场景,浏览器,编程,用户,恶意,学习,服务器,攻击方式
From: https://blog.csdn.net/jennycisp/article/details/137011498

相关文章

  • 37.html+css+js网页设计实例/“音乐”酒吧主题介绍/web前端期末大作业/
    一、前言本实例以“音乐”酒吧为主题设计,响应式web,应用html+css+js,包括图片轮翻效果、视频、音频、留言板等,供大家参考。【关注作者|获取更多源码(2000+个Web案例源码)|优质文章】;您的支持是我创作的动力!看到这里就【点赞收藏博文】,Web开发、课程设计、毕业设计有兴趣的联系我交......
  • 编程语言|C语言——C语言标识符的命名规则
    1.标识符简介在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。标识符可以简单认为是一个名字,用来标识变量名、常量名、函数名及数组等。变量名a、b、c,符号常量名PI、Pai,函数名printf、scanf等都是标识符。2.标识符命名规......
  • Mysql的Innodb引擎--一起学习吧之数据库
    MySQL的InnoDB引擎是MySQL数据库管理系统中的一个重要的存储引擎,它通过提供事务支持、行级锁定、外键约束、MVCC、缓存、索引优化、数据恢复以及分区和表空间等功能,为数据库提供了高性能、高可靠性和高扩展性的解决方案。这使得InnoDB成为大多数MySQL应用的首选存储引擎。一、......
  • Vue学习笔记62--多组件共享数据
    多组件共享数据main.js//引入VueimportVuefrom'vue'//引入AppimportAppfrom'./App.vue'//配置提示Vue.config.productionTip=false//引入vuex、storeimportstorefrom'./store'//默认引入index.jsnewVue({render:h=>h(App),stor......
  • java基础学习笔记
    publicclassdemo{publicstaticvoidmain(String[]args){}}输入Scannersc=newScanner(System.in);System.out.println("请输入一个整数:");inti=sc.nextInt();随机数Randomr=newRandom();intnumber=r.nextInt(100);//生成随机数0~99......
  • PTA基础编程题目集 6-10 阶乘计算升级版
    阶乘计算升级版本题要求实现一个打印非负整数阶乘的函数。函数接口定义:voidPrint_Factorial(constintN);其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalidinput”。裁判测试程序样例:#include<stdio.h>......
  • 深度学习与(复杂系统)事物的属性
    深度学习与复杂系统中事物属性的关系体现在:特征学习与表示:深度学习通过多层神经网络结构,能够自动从原始输入数据中学习和提取出丰富的特征表示。每一层神经网络都可能对应着事物属性的不同抽象层次,底层可能对应简单直观的属性,而随着网络深度的增加,顶层可以学习到更抽象、复......
  • Python函数式编程自带函数
    一.map函数需求1:num1=[1,2,3,4],我的需求是把num1中的每个元素平方后组成新列表。ret=[]num1=[1,2,3,4]foriinnum1:ret.append(i**2)print(ret)#输出结果:>>>[1,4,9,16]需求2:如果有1万个列表呢,怎么办?思路:如果用for循环,当然功能上是没问题的,但是需要......
  • jvm指针压缩和内存对齐的学习
    jvm指针压缩和内存对齐的学习背景最近要搞一个测试工作.想着能够提高一下在国产服务器上面的性能.想到一个办法是,提高JVM的内存配置.减少GC数量来提高性能.但是同时觉得jvm开启指针压缩的大小其实是32G内存.这里其实一直有一个疑惑.一般的网上说法都是需要低于......
  • 为什么自学编程很难找到工作?
    IT行业的竞争变得更加激烈,因为许多人都意识到了这个领域的发展潜力,导致岗位竞争日益加剧。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战,还提供了丰富的源代码。如果你渴望学习编程,不妨点个关注,给个评论222,私信22,我在后台发给你。同时,AI技术的崛起也对传统的编程......