Web安全常见漏洞原理、危害及其修复建议_常见web漏洞原理及危害和防御方法-程序员宅基地

技术标签: 安全漏洞  web  

一、 SQL注入漏洞

原理

指web应用程序对用户输入的数据合法性没有判断,导致攻击者可以构造不同的sql语句来对数据库数据库的操作。(web应用程序对用户输入的数据没有进行过滤,或者过滤不严,就把sql语句带进数据库中进行查询)。
Sql注入漏洞的产生需要满足两个条件:
①参数用户可控:前端传给后端的参数内容是用户可以控制的。
②参数代入数据库查询:传入的参数拼接到sql语句,且带入数据库查询。

危害

①数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
②网页篡改:通过操作数据库对特定网页进行篡改。
③网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
④数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
⑤服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
⑥破坏硬盘数据,瘫痪全系统。

修复建议

①过滤危险字符:例如,采用正则表达式匹配union、sleep、load_file等关键字,如果匹配到,则退出程序。
②使用预编译语句:使用PDO预编译语句,需要注意,不要将变量直接拼接到PDO语句中,而是使用占位符进行数据库的增加、删除、修改、查询。
③特殊字符转义、使用严格的数据类型。

二、XSS漏洞

原理

恶意攻击者往Web页面里嵌入脚本代码(通常是JavaScript编写的恶意代码),当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。(恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。)

危害

①盗取用户Cookie。
②修改网页内容。
③网站挂马。
④利用网站重定向。
⑤XSS蠕虫。

修复建议

①过滤输入的数据:包括”’”、”<”、“<”、“>”、“on”等非法字符。
②对输出到页面的数据进行相应的编码转换,包括html实体编码、javascript编码等。

三、 CSRF漏洞

原理

因为web应用程序在用户进行敏感操作时,如修改账号密码、添加账号、转账等,没有校验表单token或者http请求头中的referer值(如果您在网页1,点击一个链接到网页2,当浏览器请求网页2时,网页1的URL就会包含在 Referer 头信息中),从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为。
在这里插入图片描述
Csrf攻击过程两个重点:
①目标用户已经登录了网站,能够执行网站的功能。
②目标用户访问了攻击者构造的URL。

危害

①伪造HTTP请求进行未授权操作。
②篡改、盗取目标网站上的重要用户数据。
③未经允许执行对用户名誉或者资产有害的操作,比如:散播不良信息、进行消费等。
④如果通过使用社工等方式攻击网站管理员、会危害网站本身的安全性。
⑤作为其他攻击向量的辅助攻击手法,必须配合XSS
⑥传播CSRF蠕虫

修复建议

①验证请求的referer值,如果referer是以自己的网站开头的域名,则说明该请求来自网站自己,是合法的。如果referer是其他网站域名或空白,就有可能是csrf攻击,那么服务器拒绝该请求,但是此方法存在被绕过的可能。
②csrf攻击之所以能成功,是因为攻击者伪造用户的请求,所以抵御csrf的关键在于:在请求中放入攻击者不能伪造的请求,例如,可以在HTTP请求中加入一个随机产生的token,并在服务器端验证token,如果请求中没有token或者token内容不正确,则认为请求可能是csrf攻击,从而拒绝该请求。

四、 SSRF漏洞

原理

大都是由于服务器提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。利用的是服务端的请求伪造。SSRF是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。

危害

攻击者就可以利用该漏洞绕过防火墙等访问限制,进而将受感染或存在漏洞的服务器作为代理进行端口扫描,甚至是访问内部系统数据。

预防建议

① 限制请求的端口只能为web端口,只允许访问HTTP和HTTPS请求。
② 限制不能访问内网的IP,以防止对内网进行攻击。
③ 屏蔽返回的详细信息。
④ 限制请求的端口为HTTP常用的端口,比如 80,443,8080,8088等。

五、 文件上传漏洞

原理

就是未对用户上传的文件进行检查和过滤,导致某些别有用心的用户上传了一些恶意代码或文件(asp、php、jsp等),从而控制了网站。(当文件上传时,如果服务端的脚本语言没有对上传的文件进行检查和过滤,那假如,渗透者直接上传恶意代码文件,那么就有可能直接控制整个网站,或者说以此为跳板,直接拿下服务器,这就是文件上传漏洞。)

危害

非法用户可以利用恶意脚本文件控制整个网站,甚至控制服务器。这个恶意脚本文件,又称为webshell,也可将webshell脚本称为一种网页后门,webshell脚本具有很强大的功能,比如查看服务器目录、服务器中的文件,执行绕过命令等。

修复建议

①通过白名单方式判断文件后缀是否合法。
②对上传的文件进行重命名。

六、 暴力破解

原理:由于服务器端没有做限制,导致攻击者可以通过暴力手段破解所需信息,如用户名、密码、验证码等。暴力破解需要一个强大的字典,如4位数字的验证码,那么暴力破解的范围就是0000~9999,暴力破解的关键在于字典的大小。

危害

①用户密码被重置。
②敏感目录、参数被枚举。
③用户订单被枚举。

修复建议

① 如果用户登录次数超过设置的阈值,则锁定账号。
② 如果某个IP登陆次数超过设置的阈值,则锁定IP。但存在一个问题,如果多个用户使用的是同一个IP,则会造成其他用户也不能登录。

七、 命令执行漏洞

原理:应用未对用户输入做严格的检查过滤,导致用户输入的参数被当成命令来执行。攻击者可以任意执行系统命令,属于高危漏洞之一,也属于代码执行的范畴。

危害

①继承web服务程序的权限去执行系统命令或读写文件。
②反弹shell,获得目标服务器的权限。
③进一步内网渗透。

修复建议

①尽量不要使用命令执行函数。
②客户端提交的变量在进入执行命令函数前要做好过滤和检测。
③在使用动态函数之前,确保使用函数是指定的函数之一。
④对php语言而言,不能完全控制的危险函数最好不要使用。

八、 文件包含漏洞

原理

开发人员将需要重复调用的函数写入一个文件,对该文件进行包含是产生的操作。这样编写代码能减少代码冗余,降低代码后期维护难度,保证网站整体风格统一:导航栏、底部footer栏等。文件包含函数加载的参数没有经过过滤或严格定义,可以被用户控制,包含其他恶意文件,导致了执行非预期代码。

危害

①获取敏感信息
②执行任意命令
③获取服务器权限

修复建议

①建议白名单。
②指定访问一定的路径,再将参数拼接到路径当中。

九、 逻辑漏洞

原理

指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付等功能处。

危害

任意密码修改、越权访问、密码任意找回、交易支付金额任意修改…

修复建议

关于越权访问:越权访问漏洞产生主要原因是没有对用户的身份做判断和控制,防范这种漏洞时,可以通过session来控制。例如,在用户登录时,将username或uid写入到session中,当用户查看个人信息时,从session中取出信息,而不是从GET或POST取出username,name此时取到的username就是没有篡改的。

十、 XXE漏洞

原理

XXE漏洞(XML 外部实体注入),XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

危害

①读取任意文件。
②执行系统命令。
③探测内网端口。
④攻击内网网站。

修复建议

①进制使用外部实体,例如:
PHP:libxml_disable_entity_loader(true)
②过滤用户提交的xml数据,防止出现非法内容。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/c_programj/article/details/117452836

智能推荐

Android Studio 代理问题总结(Gradle代理,模拟器代理)_andorid studio 模拟器走本地代理-程序员宅基地

文章浏览阅读1.3w次,点赞5次,收藏11次。Android Studio 的 代理 和 gradle的代理 和 AVD模拟器 代理_andorid studio 模拟器走本地代理

技术明星的毁灭----团队中的识人与用人-程序员宅基地

文章浏览阅读1.6k次。 他,是一个有15年开发经验的优秀软件工程师! 他,是我学习C++的老师! 他,可以解决公司里其他所有大侠们解决不了的技术难题! 他,是公司每一个技术人员值得学习的榜样! 他,从一个项目经理后来成为一家Nasdaq上市公司的技术总监! 他,后来负责这家公司一个分公司的管理,做了公

逆序输出字符串_输入一个字符串将其逆序输出-程序员宅基地

文章浏览阅读9.9k次,点赞7次,收藏33次。编写程序:先设计一个函数fun(char *s)把字符串中的内容逆置后,将字符串输出。例如:字符串中原有内容为:gfedcba,则调用该函数后,串中的内容为:abcdefg。思想:把字符串中的内容逆置,也就是调换位置,通过中间变量,把s[len-i-1]的内容和s[i]的内容调换位置,从而实现内容逆置的结果。下面展示一些 输入输出结果。_输入一个字符串将其逆序输出

js日期格式化yyyy-MM-dd_js 日期格式化为yyyy-mm-dd-程序员宅基地

文章浏览阅读4.6w次,点赞9次,收藏13次。function formatDate(date) {console.log(date);// date = new Date();date = new Date(Date.parse(date.replace(/-/g, "/"))); //转换成Data();console.log(date);var y = date.getFullYear();console.log(y);var m = date.getMonth() + 1;m = m < 10 ? '0' + m :..._js 日期格式化为yyyy-mm-dd

深入HQL学习以及HQL和SQL的区别_hql sql-程序员宅基地

文章浏览阅读5.8w次,点赞38次,收藏218次。HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. 它有如下功能:在查询语句中设定各种查询条件;支持投影查询, 即仅检索出对象的部分属性;支持分页查询;支持连接查询;支持分组查询, 允许使用 HAVING 和 GROUP BY 关键字;提供内_hql sql

MFC-ListCtrl 可编辑重写 _mfc listctrl 编辑-程序员宅基地

文章浏览阅读6k次。MFC下,提供了List Control控件,当选择Report模式时,可以方便的做数据报表之类的应用。类似下图: 但是有个不大不小的问题是,当List Control选择可编辑模式时,只有每一行的第一列的单元格才能编辑,而且在默认情况下,当选中的时候,也只有被选中的这一行的第一个单元格才会反色显示~~这未免太BT了~在网上找了一些相关的帖子,解决整行选中的问题可以采用为List _mfc listctrl 编辑

随便推点

webstorm 2019 最新注册码 破解方法(持续更新中~_webdriver 2019 license-程序员宅基地

文章浏览阅读1.7w次。webstorm 对咱们前端来说是无人不知无人不晓,那么下面就安利一下webstorm的注册方法吧。2019-2-21更新(注册码激活):访问http://idea.lanyus.com/按照箭头顺序操作即可。第一步,下载资源JetbrainsIdesCrack-4.2-release-enc.jar,第二步,修改文件,1.、2...._webdriver 2019 license

hive的使用及基本操作完整版_hive使用-程序员宅基地

文章浏览阅读8.8k次,点赞9次,收藏22次。安装mysql、hive步骤一、什么是hiveHive是基于Hadoop的一个数据仓库工具(离线),可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。操作接口采用类SQL语法,提供快速开发的能力, 避免了去写MapReduce,减少开发人员的学习成本, 功能扩展很方便。用于解决海量结构化日志的数据统计。本质是:将 HQL 转化成 MapReduce 程序1、优缺点优点:1) 操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)。 2) 避免了去写 MapR_hive使用

课堂笔记day1__基础_编写main方法,声明一个product对象数组products-程序员宅基地

文章浏览阅读540次。运算符的优先级:顺序运算符1括号 ()2一元运算符 ++、-- 和 !3算术运算符 +、-、*、/、%4关系运算符 >、>=、<、<=、==和 !=5逻辑运算符 &&(与) 、或者6条件运算符和赋值运算符 ? : 、=、*=、/=、+=、-=注意:顺序5的地方 或者(||)..._编写main方法,声明一个product对象数组products

关于CountDownLatch和CyclicBarrier的认识_关于cyclicbarrier和countdownlatch说法正确的是-程序员宅基地

文章浏览阅读917次。**关于CountDownLatch的认识** 今天在浏览论坛的时候发现了一个有趣的东西,自己之前没有用过,在此记录一下,一遍日后阅读浏览, 作为程序员,尤其使一个已近做了3年的java程序员来说,总感觉自己都会了,其实自己稍微看看又发现自己咋又不知道呢, 这个也是我的感慨,应为即将面临这找工作,自己还有有一点压力的,还是比较怕技术面试的,不知道面试官会问哪些奇怪的问题,这些问题又是我不知道的_关于cyclicbarrier和countdownlatch说法正确的是

android蓝牙动态权限,安卓蓝牙动态权限-程序员宅基地

文章浏览阅读2k次。安卓蓝牙动态权限安卓7.0及以下版本在 IDE 的 Project - Options 菜单弹出来的窗口里面,找到左边树结构的: Application -- Uses Permissions 项目,则右边会出来一堆权限让你打勾。这里要勾选上 Bluetooth 和 Bluetooth admin 两项。老的安卓版本,勾选这两项就可以了。安卓8.0及以上版本,还需要运行期用代码动态申请权限。代码里..._android witbluetoothmanager.requestpermissions

数据结构-线性表的两种实现方式:顺序表和链表_画出线性表两种不同实现方式的示意图-程序员宅基地

文章浏览阅读1.1k次。顺序表就是在内存中按顺序连续开辟一段空间来存储数据的结构,在java中就是数组,如a所示链表就是在内存中随机开辟内存一段段存储数据的结构,如图b所示线性表的接口使用一个接口表明基本操作的需求:public interface Ilist { //清空线性表 public void clear(); //判断线性表是否为空 public boolean isEmpty(); //获取线性表的长度 public int length(); /._画出线性表两种不同实现方式的示意图