Web安全之权限攻击
权限攻击可以分为水平权限攻击和垂直权限攻击。
水平权限攻击
水平权限攻击,也叫作访问控制攻击。Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或者在判断数据所属人时从用户提交的表单参数中获取了userid。导致攻击者可以自行修改userid修改不属于自己的数据。所有的更新语句操作,都可能产生这个漏洞。
攻击
我们来看看攻击案例,Web应用在修改用户个人信息时,从用户提交的表单中获取userid,执行修改操作:
<form action="/struts1/edituser.htm" method="post"><input name="userid" type="hidden" value="<%=userid%>"><table border="1"><tr><td>username:</td><td><%=rs.getString("name")%></td></tr><tr><td>passwd:</td><td> <input name="pass" value="<%=rs.getString("pass")%>"></td></tr><tr><td>type:</td><td><%=rs.getString("type")%></td></tr><tr><td>realname:</td><td><input name="realname" value="<%=rs.getString("realname")%>"></td></tr><tr><td>email:</td><td> <input name="email" value="<%=rs.getString("email")%>"></td></tr><tr><td>tel:</td><td> <input name="tel" value="<%=rs.getString("tel")%>"></td></tr>
</table>
<html:submit/>
</form>
表单中,将用户的userid作为隐藏字段,提交给处理修改个人信息的应用。
下面是修改个人信息的后台代码:
int userid=Integer.valueOf( request.getParameter("userid"));
String email=request.getParameter("email");
String tel=request.getParameter("tel");
String realname=request.getParameter("realname");
String pass=request.getParameter("pass");
JdbcConnection conn = null;
try {conn = new JdbcConnection();Object[] params = new Object[5];params[0] = email;params[1] = tel;params[2] = realname;params[3] = pass;params[4] = userid;final String sql = "update user set email=?,tel=?,realname=?,pass=? where userid=?";conn.execUpdate(sql,params);conn.closeConn();
这段代码从表单参数列表中获取userid,修改userid对应的用户数据。
攻击者可以随意修改表单的userid:
修改userid后,提交表单,就可能修改了其他用户的数据。
防御
这种情况似乎很容易被忽略,包括我现在着手的一个项目也是才发现这样的一个问题。那么应该如何解决呢?其实也很容易。就是从用户的加密认证cookie中获取当前用户id,并且在执行的sql语句中加入当前用户id作为条件语句。由于cookie是加密的,所以攻击者无法修改加密信息。
int userid=Integer.valueOf( GetUseridFromCookie(request));
String email=request.getParameter("email");
String tel=request.getParameter("tel");
String realname=request.getParameter("realname");
String pass=request.getParameter("pass");
JdbcConnection conn = null;
try {conn = new JdbcConnection();Object[] params = new Object[5];params[0] = email;params[1] = tel;params[2] = realname;params[3] = pass;params[4] = userid;final String sql = "update user set email=?,tel=?,realname=?,pass=? where userid=?";conn.execUpdate(sql,params);conn.closeConn();
代码中通过GetUseridFromCookie方法,从加密的cookie中获取当前用户的id,并加入判断。
垂直权限攻击
垂直权限攻击又叫做权限提升攻击。其原理是由于Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
攻击
我们来看看攻击案例,下面是一个仅仅做了菜单控制的代码:
<tr><td><a href="/user.jsp">管理个人信息</a></td></tr>
<%if (power.indexOf("administrators")>-1){%>
<tr><td><a href="/userlist.jsp">管理所有用户</a></td></tr>
<%}%>
攻击者只需要猜中管理所有用户的页面url就可以越权操作了。
防御
这种攻击很容易防御,只需要在每个页面的加载之前进行权限验证即可。一个普通的权限系统,菜单是通过数据库中对应权限和角色来进行字符串拼接形成的,而不是静态的通过在页面上进行权限判断决定的。
文章转载自http://blog.csdn.net/mevicky/article/details/48287099
Web安全之权限攻击相关推荐
- web安全编程——权限的分配和控制
web安全编程--权限的分配和控制 2009-07-02 15:46 通常权限划分是为了控制数据和功能的使用范围.传统的划分方法一般将用户划分为匿名用户.普通登录用户.管理员用户.我们暂时将以上三 种 ...
- 安全狗技术分享|Web应用防火墙之攻击防护
一旦我们正式把web应用上线后,web应用就暴露在公网的环境中,随之则会产生访问和流量,我们最常开放的80端口和443端口就有可能被探测到随之就有可能被自动化工具扫描甚至被监控和攻击,那么怎么防护这些 ...
- 前端 web端常见的攻击有那几种类型 网站瘫痪 崩溃的原因
前端 web端常见的攻击有那几种类型 文章目录 前端 web端常见的攻击有那几种类型 dos攻击和ddos攻击 dos攻击的原理 ddos攻击 dos攻击的类型 CSRF攻击 CSRF防御 XXS攻击 ...
- 针对Web应用的【攻击模式篇】
攻击模式:主动攻击.被动攻击. 主动攻击是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式. 具有代表性的攻击:SQL注入攻击和OS命令注入攻击. 被动攻击是指利用圈套策略执行攻击代码的攻击模 ...
- WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等...
核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Websh ...
- 用iptables来防止web服务器被CC攻击
今天在网上又学了一招. 要学会攻防兼备哦. 当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能. 1.系统要求 (1)LINUX 内核 ...
- 网站服务器的解决方案有,Web网站服务器DDOS攻击的解决方案
Web网站服务器DDOS攻击的解决方案,有需要了解的朋友可参考一下,这里我们只介绍免费的防ddos攻击的解决办法. 1. 服务器端分析方法 (1)SYNFlood攻击判定 A:网上邻居->右键 ...
- 如何设置 Web 服务器的权限之iis
来源:http://www.study-code.com/server/maintain/75655.htm 如何设置 Web 服务器的权限?如果Web服务器的权限没有设置好,那么网站就会出现漏洞并且 ...
- IIS Web 服务器的权限设置
IIS Web 服务器的权限设置有两个地方,一个是 NTFS 文件系统本身的权限设置,另一个是 IIS 下 网站->默认网站->右击属性->虚拟目录 面板上.这两个地方是密切相关的. ...
最新文章
- R语言ggplot2可视化:ggplot2可视化直方图(histogram)并在直方图的顶部外侧(top upper)或者直方图内部添加数值标签
- mybatis做like模糊查询
- 小白如何购买阿里云服务器(图文教程)?
- Vmware Vsphere虚拟化技术:6.7新特性介绍
- C# Winform只能输入数字的TextBox---补充
- Java-命令行传递参数
- 杀毒软件杀毒后桌面图标为什么都成打开方式了
- 基于vue开发简易备忘录,实现列表增删
- LeetCode 110. Balanced Binary Tree
- 使用Ueditor点击上传图片时显示延迟的问题
- HTML中可伸缩容器怎么设置,CSS布局神器——伸缩盒(语法篇)
- SpringBoot 轻量级英文版个人博客 flame
- JAVA计算机毕业设计随心淘网管理系统源码+系统+mysql数据库+lw文档
- 中国远程医疗行业发展前景预测和投资规划分析报告2022-2027年
- Notepad++ 一键格式化php代码
- 苹果尝试支持AdobeFlash,结果尴尬了
- javascriptji c z s
- Python实现ATM
- IE下不显示自定义错误页面
- ADS1.2 Error:(Fatal) L6002u:could not open file C:/...
热门文章
- Winform 事件
- 4.Python标准库_文件管理 (部分os包,shutil包)
- 效率源希捷硬盘远程维修案例-K9盘卡死引起的F级处理
- 让Fiddler能够检测到localhost的http数据
- java 蓝桥杯算法训练 数组查找及替换
- 学java的就业方向_学习Java的就业前景怎么样
- sklearn 决策树例子_使用 sklearn 构建决策树并使用 Graphviz 绘制树结构
- c++ 23种设计模式_使用Go实现GoF的23种设计模式(三)
- 走进C/C++函数的名字改编
- ContainerAllocator详解