Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WEB开发常见的安全漏洞和解决思路

WEB开发常见的安全漏洞和解决思路

原创
作者头像
windwei
修改于 2020-02-11 03:55:58
修改于 2020-02-11 03:55:58
2.3K00
代码可运行
举报
文章被收录于专栏:魏佳新魏佳新
运行总次数:0
代码可运行

一,SQL注入

SQL注入时web开发中最常见也是危害性最大的安全漏洞,SQL注入攻击可能会导致 服务器故障,数据泄漏,数据被恶意删除等等严重后果。

SQL注入最常见的方式有:

1.布尔型盲注

在互联网刚刚兴起的时候,该方法常常会被用来恶意登录一些安全性不高的网站:

代码语言:sql
AI代码解释
复制
SELECT * FROM users WHERE user_name ='zhangsan' and password ='mima';

如果用户在密码框里填入 'or1=1or1=',那么上面的SQL 就变成了

代码语言:sql
AI代码解释
复制
SELECT * FROM users WHERE user_name ='zhangsan' and password ='' or 1 =1 or 1='' ;

这样就可以绕过密码校验,登录为任意用户了

2.报错型注入

一个常见的语句为 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM users WHERE id=1 AND user_name ='zhangsan' 

通过修改 zhangsan 这个 入参,很容易将SQL拼接为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM users WHERE id=1 AND user_name= 'zhangsan' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT(USER(),FLOOR(RAND(0)*2))X FROM information_schema.tables GROUP BY X)a) AND 1='1';

这个语句会报一个固定的错误

显然,你用来登录Mysql的用户名就暴漏了

3.union注入

这种比较好理解,就是在原来的select 语句上通过union的方式,增加新的信息,将SQL拼接为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM users WHERE id=1 AND user_name ='zhangsan' union select * from other_table 

这种方式可以查询到你的任意表的信息,严重的话可能会被脱库。

4.SQL堆叠查询

这种跟 union 类似,可以将SQL拼接为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM users WHERE id=1 AND user_name ='zhangsan' ; select * from other_table

更为严重的是,分号后面的语句时可以随意写的,如果时拼上 drop 或者 delete 之类的语句 就可以会造成删库的风险了。

SQL注入的攻击最常见,影响也最大,SQL注入的本质是将 用户本来应该传入的 “数据” 变成了 程序 会执行的“代码”,从根源上解决这个问题,就是不要让 数据变成代码,最好的方式就是预编译了。

如果时已经写完了的历史代码,修改起来非常麻烦的话,可以推荐使用腾讯云的waf ,waf 可以帮助用户解决很多安全防护的问题 :https://cloud.tencent.com/product/waf

二,CSRF漏洞

CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,攻击者盗用了你的身份,以你的身份来调用后台接口,对服务器来说这个请求是完全合法的,但是实际上,这个接口的调用,你却并不知情。

简单模拟一下整个过程如下:

1. 张三打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;网站A 有一个接口为http://www.a.com/deletedata?id=100 ,那么正常情况下,因为张三已经登录了网站A,那么他是可以直接访问这个接口的。

 2. 张三在同一浏览器中,打开一个TAB页访问网站B;网站B 上有这么一段代码 <a href ='http://www.a.com/deletedata?id=100 ' > 查看 </a> ,这样的话 如果张三在B网站上点击了 查看 这个 按钮,那么实际上 ,他就删除了 在 A网站上的 数据了。

 当然例子里是个 deletedata ,而实际上这个接口的含义也可能是查询了某个数据,甚至时转了一笔钱等等,那么影响就非常大了。

要防治CSRF 漏洞,一般有两种方法:

1.验证 HTTP Referer 字段

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理,以上示例中,如果A网站做了这个校验,那么他就可以识别出 deletedata 这个请求时来自于 B网站而不是A网站自身,就可以拒绝掉这个请求了。

这种方式最常见也最简单,但是却并不是最安全的,毕竟Referer是依赖浏览器的,每个浏览器对 Referer的实现可能不一样,对于部分浏览器,Referer 甚至是可以篡改的 。另外,由于网站会记录 Referer信息 ,在用户对隐私的问题越来越敏感的今天,可能会带来隐私风险问题。

2.在请求中增加 token 并验证;

CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,是因为黑客利用已知信息以及cookie中的未知信息 来发起了攻击,那么,如果我们添加一个不能伪造的并且不在cookie中的未知信息,那么攻击就无法产生了。因此,我们可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端进行token校验,如果没有token或者token的值不正确,我们就认为这是一个非法的请求,拒绝掉他就可以了。

三,SSRF漏洞

SSRF是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。因为请求本身是由服务端发起的,因此可以通过这个请求调用到服务端的一些内部接口,探测内网的信息,攻击内网的服务等等。

可能会产生SSRF 漏洞的地方主要有:

1.能够对外发起网络请求的地方

2.请求远程服务器资源的地方

3.一些邮件系统,文件上传,文件处理系统,在线处理工具等等

举一个简单的示例:

假如 A网站有一个功能,就是用来下载一些第三方的数据的,URL 为 http://a.com/downloadurl="http://b.com/b.jpg",

执行逻辑上其实就是简单的 wget -Ob.jpg http://b.com/b.jpg 这样的。明面上,这个功能很简单,就是将一些网站 ,比如 b.com 上的 图片给下载下来保存。看起来没啥问题

但是,如果这里的参数被人利用 改成了 http://a.com/downloadurl="http://127.0.0.1/deletedata?id=1" ,那么当你执行 weget -Ob.jpg 的时候,就等于是执行了内部接口 deletedata了,这样就会对内部系统造成攻击。更深层次的,如果是用的其他一些协议,比如 downloadurl 为 file:///etc/passwd ,或者 dict://127.0.0.1:6379/info 之类的,就可以直接拿到服务器上的一些数据信息了。

防治SSRF漏洞的思路主要就是禁止对不安全的资源进行下载和访问:

1.禁用不需要的协议,仅仅允许http和https请求,并禁止30x跳转,可以防止类似于file://, gopher://, ftp:// 等引起的问题。

2.服务端的服务都需要做访问授权,避免root启动,禁止非正常用户访问服务。

3.设置URL白名单,限制内网IP的请求,过滤输入信息,严格判断输入的URL是不是安全的URL

四,越权漏洞

越权漏洞也是常见的web漏洞,一般分为分为水平越权和垂直越权两种,水平越权指的是攻击者尝试访问与他拥有相同权限的用户的资源,比如A本来是只能看A自己的用资料的,但是当他把URL 为getInfo?id=a 修改为 getInfo?id=b 后 就可以看到b的数据了。垂直越权是指普通的用户获取到了比他级别更高的用户的权限,如果普通用户获取到了管理员的权限。

1.水平越权

水平越权里,一个最常见的示例就是攻击者通过遍历ID 来进行信息的窃取。比如某个页面如下:

这个页面在显示列表时,就通过后台进行过滤,只显示了当前登录者的任务列表

任务名

查看详情

任务1

getInfo?id=1

任务2

getInfo?id=2

任务3

getInfo?id=3

列表里的数据,攻击者时没法伪造的,但是这里有一个查看详情的链接,如果这个 getInfo 接口本身没有做好鉴权的话,那么攻击者就可以通过遍历ID 的方式来查到到了所有用户的详情数据了,严重的甚至可能会被脱库。

2.垂直越权

垂直越权的常见例子就是菜单的展示,比如管理员可以看到所有的菜单,包括“系统管理” 这个菜单,而其他用户是看不到 “系统管理” 这个菜单的,但是,如果某个用户通过特殊途径,获取到“系统管理” 这个菜单的URL ,他直接通过这个URL 来进行访问,发现时可以访问,这个就是产生了垂直越权的漏洞了。

要避免越权漏洞,主要还是需要从逻辑上进行完善,以下有几点建议:

1.所有的接口都要做到两层鉴权,包括接口本身的鉴权以及接口对应的数据的鉴权

2.鉴权,服务端对请求的数据和当前用户身份做校验

3.所有的鉴权都要在后台做,不能依靠前端来鉴权

4.对于会暴漏给用户的数据,尽量避免通过自增ID的方式来实现,最好有自己的生成器,让黑客没法通过遍历的方式来获取数据

5.对于特别敏感的操作,可以进行二次权限校验

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
网站漏洞挖掘思路
未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,不需要输入密码,即可通过输入网站控制台主页面地址或者不允许查看的连接便可进行访问,同时进行操作。
R0A1NG
2022/06/15
1.6K0
常见的Web安全漏洞及测试方法介绍
Web应用一般是指B/S架构的通过HTTP/HTTPS协议提供服务的统称。随着互联网的发展,Web应用已经融入了我们的日常生活的各个方面。在目前的Web应用中,大多数应用不都是静态的网页浏览,而是涉及到服务器的动态处理。如果开发者的安全意识不强,就会导致Web应用安全问题层出不穷。
数澜科技
2019/09/29
1.1K0
简单的 web 安全 checklist
邹成卓
2017/04/20
2.6K0
简单的 web 安全 checklist
经常遇到的3大Web安全漏洞防御详解
程序员需要掌握基本的web安全知识,防患于未然,你们知道有多少种web安全漏洞吗?这里不妨列举10项吧,你们可以自己去网站找相应的教程来提升自己的 1、命令注入(Command Injection) 2、eval注入(Eval Injection) 3、客户端脚本攻击(Script Insertion) 4、跨网站脚本攻击(Cross Site Scripting, XSS) 5、SQL注入攻击(SQL injection) 6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7、Session 会话劫持(Session Hijacking) 8 Session 会话固定(Sessionfixation) 9、HTTP响应拆分攻击(HTTP Response Splitting) 10、文件上传漏洞(File Upload Attack)
友儿
2022/09/11
5240
前端安全之常见漏洞及防御
随着项目复杂度的提升以及用户体量的增大,前端安全变得越来越重要。平时系统运行正常,一旦出现安全问题,轻者部门扣分,严重的可能对公司造成严重损失。了解一些常见漏洞,平时coding时注意,防患于未然。
kiki.
2022/10/25
1.2K0
ctf之Web
CTF在线工具-CTF工具|CTF编码|CTF密码学|CTF加解密|程序员工具|在线编解码 (hiencode.com)
故里[TRUE]
2023/04/12
2K0
测试大佬总结:Web安全漏洞及测试方法
web应用一般是指B/S架构的通过HTTP/HTTPS协议提供服务的统称。在目前的Web应用中,大多数应用不都是静态的网页浏览,而是涉及到服务器的动态处理。如果开发者的安全意识不强,就会导致Web应用安全问题层出不穷。
顾翔
2019/12/12
1.2K0
测试大佬总结:Web安全漏洞及测试方法
web安全常见漏洞_web漏洞挖掘
检测 抓去a用户功能链接,然后登录b用户对此链接进行访问 抓去a用户功能链接,修改id为b的id,查看是否能看b的相关数据 替换不同的cookie进行测试查看
全栈程序员站长
2022/11/06
1.6K0
[网络安全] 一.Web渗透入门基础与安全术语普及
最近开始学习网络安全和系统安全,接触到了很多新术语、新方法和新工具,作为一名初学者,感觉安全领域涉及的知识好广、好杂,但同时也非常有意思。所以我希望通过这100多篇网络安全文章,将Web渗透的相关工作、知识体系、学习路径和探索过程分享给大家,我们一起去躺过那些坑、跨过那些洞、守住那些站。未知攻,焉知防,且看且珍惜,也希望您能推荐和支持作者的公众号。
Gcow安全团队
2020/08/25
2.9K0
[网络安全] 一.Web渗透入门基础与安全术语普及
真的!Web安全入门看这个就够了
在Web发展初期由于对安全问题认知认识不足,导致发生过许多的安全问题,且遗留下许多历史问题:如PHP语言至今只能依靠较好的代码规范来防范文件包含漏洞,而无法从语言本身来杜绝此类安全问题的发生。常见的安全漏洞:SQL注入、XSS攻击、CSRF。
Java程序猿
2023/04/12
8170
程序员必备基础:10种常见安全漏洞浅析
我们日常开发中,很多小伙伴容易忽视安全漏洞问题,认为只要正常实现业务逻辑就可以了。其实,安全性才是最重要的。本文将跟大家一起学习常见的安全漏洞问题,希望对大家有帮助哈。如果本文有什么错误的话,希望大家提出哈,感谢感谢~
捡田螺的小男孩
2021/05/11
9130
程序员必备基础:10种常见安全漏洞浅析
系统的讲解 - PHP WEB 安全防御
SQL注入攻击是通过WEB表单提交、URL参数提交或Cookie参数提交,将怀有恶意的“字符串”,提交到后台数据库,欺骗服务器执行恶意的SQL语句。
新亮
2019/05/28
1.2K0
系统的讲解 - PHP WEB 安全防御
分享:安全服务工程师面试知识点大纲
布尔盲注可以使用的函数很多,例如可以使用length函数来判断需要查询的内容的字符长度,使用substring函数来读取字符串的每一个字符,使用ascii函数来转换为相应的ascii值,最后通过布尔运算来判断字符的ascii值。
一名白帽的成长史
2019/10/08
3.1K0
分享:安全服务工程师面试知识点大纲
Web 最常见安全知识总结
随着Web2.0、网络社交等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中,越来越多的应用都架设在Web平台上。Web业务的迅速发展吸引了黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显。黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害。这使得越来越多的用户关注应用层的安全问题,Web应用安全的关注度也逐渐升温。 本文从目前比
李海彬
2018/03/27
1.2K0
Web 最常见安全知识总结
网络安全威胁:揭秘Web中常见的攻击手法
随着互联网的快速发展,网络安全问题日益受到重视。Web应用程序面临着来自各种攻击者的威胁,这些攻击手段多种多样,旨在窃取数据、破坏服务或者利用用户身份进行非法操作。本文将介绍几种Web中常见的网络攻击类型,以提高开发者和网站管理员的防范意识。
Front_Yue
2024/07/19
5160
网络安全威胁:揭秘Web中常见的攻击手法
这可能是最全的入门Web安全路线规划
本次写的是一篇如何通过针对性系统学习Web安全或者说如何能成为一名渗透测试人员(有疑问或者错误的地方还望大家多多指正)。
Gcow安全团队
2020/03/19
1.7K0
常见六大 Web 安全攻防解析
XSS (Cross-Site Scripting),跨站脚本攻击,因为缩写和 CSS重叠,所以只能叫 XSS。跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。
小生方勤
2019/06/01
7880
Java(web)项目安全漏洞及解决方式【面试+工作】
Java(web)项目安全漏洞及解决方式【面试+工作】 一.安全性问题层次关系 大家经常会听到看到很多很多有关安全性方面的信息,可以说形形色色,对于在网络安全方面不太专业的同志来说,有点眼花缭乱,理不出头绪。在这里,我来帮大家整理一下。   以我个人多年来从事Web安全方面的工作经验及国外一些权威安全机构对Web安全的层次性的理解,我们通常把它分为三个层次: 1.网络安全。如防火墙、路由器、网络结构等相关的安全问题 2.系统与服务安全。如Window/Linux/Unix系统本身的漏洞或运行于其上的服务的
Java帮帮
2018/06/05
4.4K0
渗透测试面试问题合集
b、端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,比如 rsync,心zang出血,mysql,ftp,ssh弱口令等。
行云博客
2022/05/11
2.7K0
Web常见漏洞分析及测试方式
  2.互联网上被脱裤后的账号密码(撞库),人们为了方便记忆很多网站使用相同的账号密码
顾翔
2020/12/01
1.6K0
Web常见漏洞分析及测试方式
推荐阅读
相关推荐
网站漏洞挖掘思路
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验