Web安全-表单域隐藏
前言
最近在安恒的漏洞扫描器发现报了一个低危漏洞——表单域隐藏。
该漏洞描述将前端HTML中包含“hidden”属性的字段均视为有低风险存在,并给出建议:检查网页表单中类型为hidden的元素,在服务器端加强校验。
日常认知里,“hidden”属性不是很常用吗(比如前端密码字段),为何存在风险?为此学习并记录一下。
语法简介
首先来了解下HTML hidden 属性:
- hidden 属性规定对元素进行隐藏。
- 隐藏的元素不会被显示。
- 如果使用该属性,则会隐藏元素。
- 可以对 hidden 属性进行设置,使用户在满足某些条件时才能看到某个元素(比如选中复选框,等等)。然后,可使用 JavaScript来删除 hidden 属性,使该元素变得可见。
来看看一个语法入门案例:
将hidden属性删除,效果如下:
风险案例
如图,用户可以通过浏览器F12开发者工具,让隐藏的区块显示出来,并很方便的修改表单的值……
有时候前端会使用隐藏域记录一些关键值(比如修改一条信息时隐藏域记录该信息的ID,提交后根据这个ID做数据更新),可用户一旦修改这些值,再提交,那不就出乱子了,如何解决?
修改UID
前端页面如下:
<form>
<input type=“hidden” name="id" value=1 />
<input type="text" name="userName" />
<input type="text" name="phone" />
<button type="submit" value="保存" />
</form>
Controller 方法如下:
@Controller
public class UserController {@Autowriedprivate UserService userService;@RequestMapping("/update")public String update(User u) {userService.update(u);...}
}
SQL语句如下:
update user set userName=#{userName}, phone=#{phone}
where id=#{id}
修改用户信息时,故意将隐藏的id改成其他人的,然后提交,这样的问题怎么解决?
【解决方案】
- 方案一 可以将UID避免通过前端传参,并将登录人的基本信息存到Session里;
- 方案二 将要修改的主键ID加密存储在隐藏域,后端解密获取主键ID;
- 方案三 在表单中,不得不使用隐藏域的时候,需要添加JS校验文件,对隐藏域的值进行校验,检验通过后才允许提交表单。
在数据库进行update数据更新的时候,where后面除了id=id,还要加个UserID=UserID,这样就能保证自己改自己的信息了。即:
update user set userName=#{userName}, phone=#{phone}
where id=#{id} and UserID=UserID
修改价格
公共漏洞和披露网站CVE(Common Vulnerabilities and Exposures)公布了Element InstantShop中的Web网页add_2_basket.asp的一个漏洞项,允许远程攻击者通过隐藏的表单变量“price”来修改价格信息。这个表单的形式如下所示:
<INPUT TYPE = HIDDEN NAME = "id" VALUE = "AUTO0034">
<INPUT TYPE = HIDDEN NAME = "product" VALUE = "BMW545">
<INPUT TYPE = HIDDEN NAME = "name" VALUE = "Expensive Car">
<INPUT TYPE = HIDDEN NAME = "price" VALUE = "100">
利用这个漏洞,不怀好意者可以任意设定price字段的值,然后提交给InstantShop网站的后台服务器,从而可能用100美元就可以获得一部BMW545。
修复方案
- 如果表单中隐藏域的值在整个项目中都有使用,可以考虑通过session,在action后台处理界面中,直接读取session的值,而不是通过前台的隐藏域读取。
- 在表单中,不得不使用隐藏域的时候,我们需要添加js校验文件,对隐藏域的值进行校验,检验通过后才允许提交表单。
虽然该漏洞风险很简单,但也算意识到了常用的hidden属性存在的风险。滴水穿石非一日之功,安全路上慢慢积累吧。
Web安全-表单域隐藏相关推荐
- JavaWeb第四讲 会话跟踪技术HttpSession、Cookie、url、隐藏表单域
会话跟踪技术Session.Cookie.url.隐藏表单域 (一)Session session是保存在服务器端,理论上是没有是没有限制,只要你的内存够大. 浏览器第一次访问服务器时会创建一个ses ...
- java 填充pdf_Java如何创建和填充PDF表单域(代码示例)
本篇文章给大家带来的内容是关于Java如何创建和填充PDF表单域(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 表单域,可以按用途分为多种不同的类型,常见的有文本框.多行 ...
- html js文件域val,js实现文件上传表单域美化特效
一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程. 先上几个效果饱饱眼福: 使用方法 这些文件上传域的美化使用的方法都是隐藏原生的元素,然后使用一个元素来制作美化效果. @H_502_ ...
- Java 创建、填充PDF表单域
表单域,可以按用途分为多种不同的类型,常见的有文本框.多行文本框.密码框.隐藏域.复选框.单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据.下面的示例中,将分享通过Java编程在PDF中添加 ...
- web之表单form
表单是我们平常编写Web应用常用的工具,表单(<form>)用来收集用户提交的数据,发送到服务器.比如,用户提交用户名和密码,让服务器验证,就要通过表单.表单是一个包含表单元素或控件的区域 ...
- jQuery基本选择器 (实例及表单域 value 的获取)
jQuery基本选择器包括 CSS选择器.层级选择器和.表单域选择器. 1.CSS选择器 (1)标签选择器 $("div") $("p") $(" ...
- Java POJO Bean 对象与 Web Form 表单的自动装配
PS: 我一直在找寻为什么 struts2有自动将form字段和getter setter 自动 匹配的功能, 这篇文章解答了我的疑惑 深度剖析:Java POJO Bean 对象与 Web Form ...
- php 美化js文件,js实现文件上传表单域美化特效_javascript技巧
一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程. 先上几个效果饱饱眼福: 使用方法 这些文件上传域的美化使用的方法都是隐藏原生的元素,然后使用一个元素来制作美化效果. HTML结构 ...
- java 填充pdf_Java创建和填充PDF表单域方法
表单域,可以按用途分为多种不同的类型,常见的有文本框.多行文本框.密码框.隐藏域.复选框.单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据.下面的示例中,将分享通过Java编程在PDF中添加 ...
最新文章
- 2140: 学无止境(差分)
- spring boot多模块项目一个模块引用另一个模块的实体类报错空指针
- SAP WM The Link Between TR and TO Document
- 外观模式和代理模式的联系和区别_设计模式之代理设计模式
- Hibernate,JPA注解@Entity
- CMake-add_executable()
- web下拉列表代码_文章列表总结(一)
- 核心网upf作用_核心网“入门级”科普,你看了没?
- sqlmap-学习1 配置环境
- 距离Java开发者玩转 Serverless,到底还有多远?
- Atitit 企业文化之道 ---假日文化 attilax总结
- python机器学习实战_Python机器学习实战案例
- 腐蚀rust服务器命令_腐蚀RUST基本指令及服务器指令大全
- 照片调色系列教程(一):打造格调美女
- Echarts自定义数据视图(DataView)-按钮名称-刷新方法
- 游戏夜读 | 简单认识一下爬虫
- 下载安装pip-19.0
- 美团招聘CV算法专家/AutoML专家
- qt调试android程序崩溃,使用qt5开发的Android应用程序合并了AWS C++库崩溃
- 学习matlab(十六)——工具箱(神经网络)