Web安全之浅见

2024-02-22 07:52
文章标签 安全 web 浅见

本文主要是介绍Web安全之浅见,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

备注:这是我在2017年在自己的网站上写的文章,今天迁移过来。

        昨天去参加了公司组织的一个关于网络安全的培训,了解了很多关于网络安全方面的知识,也才意识到网络安全是一项极其重要的领域。

        本篇文章主要聊聊Web安全。不过我对于网络安全方面不是特别懂,所以网络安全方面的大牛们,可以忽略我的文章哈。

本文主要讲以下几种:

  1. DDos攻击
  2. XSS;
  3. CSRF;
  4. SQL注入;

一、Ddos攻击

  DDos攻击,它的原理主要是利用触发大量的协议上允许的请求,从而让你的服务器资源耗尽,比如SYN_FLOOD,DNS_FLOOD,还有HTTP连接的慢连接,CC等等。

        SYN_FLOOD, syn 洪攻击,攻击者伪造客户端不断向服务器发送建立TCP连接请求,但发送完SYNC标志位建立请求之后,不继续后续流程。服务器会不断回复ACK,导致服务器端出现了大量了半开连接,如果数量巨大,导致服务器可能无法再继续正常处理请求。

        洪攻击的缓解方式有多种。如果客户端ip不变,就比较简单了;如果是伪造的,则比较麻烦了。可以增加服务器内部半连接队列大小,可以定期删除半连接队列中最早的SYN。也可以在服务器之前设立一道墙,比如Cloudflare 。对于初始的SYN请求,不直接到达服务器,而是由Cloudflare 完成,

        DNS_FLOOD,dns 洪攻击,这个是对DNS服务器的攻击,DNS服务器用来进行域名解析的,DNS攻击就会向DNS服务器发送大量的请求,导致DNS服务器无法正常进行域名解析。或者就算服务器本身可承受,但由于大量请求过来,可能导致服务器所在的网络运营商发现了流量异常超标,已经影响了整个出口带宽,运营商都会直接把你ip封掉。

        不知道大家是否听说过2009年的暴风影音事件,因为两家游戏公司恶意竞争,一个公司恶意攻击另外一家公司网站,导致DnsPod服务器受到Ddos攻击,再加上当时著名的暴风影音使用了免费的DnsPod服务器,也受到了影响,那时的暴风今非昔比,用户量巨大,导致大量域名解析请求达到了电信的DNS服务器,占用了典型机房的1/3的带宽,于是乎,被电信封掉了ip。这一封不要紧,直接导致使用DnsPod解析的网站全部无法访问,数量达到10万+。有感兴趣的可以看看历史回顾,很精彩,DnsPod创始人很厉害,叫吴洪声,作为一个大专生,靠着爱好和坚持搭建了DnsPod,现在已经被腾讯收购了,妥妥的人生赢家。

        CC攻击,这个就比较隐蔽了,他是模拟正常用户发送大量请求,一直到该网站的服务器资源被耗尽,系统发生宕机。因为其请求是有效的,是模拟正常用户请求的,而且利用代理服务器会使得请求Ip,请求头信息不断改变,所以防范起来不是特别容易。

        解决CC首先要识别CC。识别CC的手段包括:

       1、异常流量监测

         如果监测到我们系统的流量突增,大到远远超过我们正常的流量水平,就要怀疑遇到了CC攻击。

      2、服务器资源监控

         实际上这个和第一个是同步的,如果服务器资源,包括CPU,内存,硬盘都突然间占满,也要怀疑CC的攻击。

     3 、接口相应异常率

       就算是模拟请求,可能还是不会正常返回业务响应码,我们完全可以监控我们的响应code(可能不是响应头的响应码)的错误率,如果非常高,那也说明我们可能遭到了CC攻击。这个我们可以通过本地日志统计或者公司的监控平台来看,我们埋点时也基本上都会统计成功率,耗时等信息的。

   解决手段:

      1、拒绝代理访问

         CC攻击基本上都是使用代理服务器的,我们完全可以限制所有代理服务器的访问,不过有可能误伤。

      2、IP黑名单

     可以对某些网段,某些IP设置黑名单,但感觉作用有限。

     3、限流

       没办法,限流会保证系统不崩,但可能会导致正常请求也被限流住了。

其他的防御手段可能还有增加CDN、增加防火墙、限制连接数、负载均衡、增加带宽等等。

        

二、XSS

1、原理

XSS全名是Cross Site Script,正因为叫XSS,是为了避免和前端的CSS重复。它的原理是攻击者通过向某界面插入一些恶意的脚本,使得在别人访问该页面j加载html的时候会自动执行恶意脚本,从而达到某种目的,比如窃取你的cookie啊,这是最致命的了。

我就结合我的网站来说,我现在要编辑一篇文章,然后我在正文中插入一个简单的脚本代码,如图:

当我编辑完,提交之后,假如我网站没有任何的防御机制,原封不动地将文章数据保存到数据库中。那当有一个用户要访问该文章对应的页面的时候,那这段代码就会被执行。如下:

这个简单的例子就展示了XSS攻击的思想。攻击者完全可以利用网站漏洞,在网站中输入恶意的HTML代码,当用户浏览该网站时,这段代码会被自动执行。可以盗取你的cookie,比如拿到用户的登录token,或者重定向其他网站等等。

2、防御

这里说下在Django中队XSS的防御措施。Django是分成两部分的,一是输入,二是输出。

首先,当你输入完内容要提交的时候,它是要对你的输入字符串进行转义的。

比如你上面输入了script,它会将其转义成:

 <script>alert(&#39海波你真帅!&#39) </script>

嗯,小样,我让你植入,去屎。

当你在执行提交事件时,Django模板会自动进行html转义,下面五个字符转义关系:

  • < 会转换为 &lt;
  • > 会转换为 &gt;
  • ' (单引号) 会转换为 &#39;
  • " (双引号)会转换为 &quot;
  • & 会转换为 &amp;

说完输入,再说输出。输出时Django默认对你加载的变量进行转义。

        但说实话,有的时候我们是不需要转义,比如我的content内容本身就是富文本,在数据库中也是html啊,有各种html标签。因此这时候可以关闭自动转义。

        关闭自动转移可以通过autoescape或者safe, safe是针对独立变量的,autoescape是针对整个代码块的。

{% autoescape off %}Hello {{ name }}Hello {{ name|escape }}
{% endautoescape %}

        注意到没有,我有一个加了escape,这是说虽然对整个子模块关闭转义,但我还想对某个变量进行转义,那就用escape。

三、CSRF

我之前在我的网站中有介绍,感兴趣的可以访问: Django的CSRF介绍。

四、SQL注入

1、原理

        SQL注入攻击的原理就是通过在Web表单中提交一些特殊的字符串,然后让服务器的数据库运行一些SQL语句,从而达到攻击的目的。比如获取用户信息,删除数据库数据等等。你想想,如果银行数据被获取或者篡改或者获取,是多么危险的一件事。

现在拿查询来说,一个标准的查询语句如下:

select username from auth_user where username = 'somename'

假如现在,用户在表单中输入了:' or '1'='1',那sql语句就变成:

select username from auth_user where username = '’ or '1'='1'

该语句的where恒为真,所以会获得所有用户的信息,之前据说CSDN就被爆出几百万用户信息泄露。

上面仅仅是查询,那要是delete或update就危险了,delete from where ......,我把数据都删了。

2、防御

        其实现在Web对sql注入的防御已经比较完善了。就拿Django框架来说,它的保护机制还是非常给力的。

       首先,Django提供了完备的表单验证机制。

        对每一个你输入的字段数据,都会进行各种验证。比如用户名,你还有单引号类似的特殊字符是肯定会抛出异常的。只有你的数据都是有效的,才会执行后续的数据操作。关于更多表单字段验证的可参考我另一篇文章: Django表单验证。

        其次,Django的ORM框架使得会对Django会根据你所使用的数据库服务器的转换规则,自动转义特殊的SQL参数。在《Django Book 2》中有说明:

foo.get_list(bar__exact="' OR 1=1")Django会自动进行转义,得到如下表达:SELECT * FROM foos WHERE bar = '\' OR 1=1'

    (2023年补充内容),我们Java开发者,会经常使用Mybatis,Mybatis通过预编译也已经帮我们避免sql问题的发生,但前提是你要按照规范来开发,字段值要使用 “#{ }”。

以上只是简单的介绍,离深入研究网络安全、系统安全还远着呢。系统安全还要包括数据安全和应用安全,数据安全还包括日志脱敏、数据存储、传输加解密;应用安全包括接口鉴权、  漏洞检查等等各个方面。 

这篇关于Web安全之浅见的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734604

相关文章

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

JavaWeb【day09】--(Mybatis)

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简