前言

最近在安恒的漏洞扫描器发现报了一个低危漏洞——表单域隐藏

该漏洞描述将前端HTML中包含“hidden”属性的字段均视为有低风险存在,并给出建议:检查网页表单中类型为hidden的元素,在服务器端加强校验。

日常认知里,“hidden”属性不是很常用吗(比如前端密码字段),为何存在风险?为此学习并记录一下。

语法简介

首先来了解下HTML hidden 属性

  1. hidden 属性规定对元素进行隐藏。
  2. 隐藏的元素不会被显示。
  3. 如果使用该属性,则会隐藏元素。
  4. 可以对 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改成其他人的,然后提交,这样的问题怎么解决?

【解决方案】

  1. 方案一 可以将UID避免通过前端传参,并将登录人的基本信息存到Session里;
  2. 方案二 将要修改的主键ID加密存储在隐藏域,后端解密获取主键ID;
  3. 方案三 在表单中,不得不使用隐藏域的时候,需要添加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。

修复方案

  1. 如果表单中隐藏域的值在整个项目中都有使用,可以考虑通过session,在action后台处理界面中,直接读取session的值,而不是通过前台的隐藏域读取。
  2. 在表单中,不得不使用隐藏域的时候,我们需要添加js校验文件,对隐藏域的值进行校验,检验通过后才允许提交表单。

虽然该漏洞风险很简单,但也算意识到了常用的hidden属性存在的风险。滴水穿石非一日之功,安全路上慢慢积累吧。

Web安全-表单域隐藏相关推荐

  1. JavaWeb第四讲 会话跟踪技术HttpSession、Cookie、url、隐藏表单域

    会话跟踪技术Session.Cookie.url.隐藏表单域 (一)Session session是保存在服务器端,理论上是没有是没有限制,只要你的内存够大. 浏览器第一次访问服务器时会创建一个ses ...

  2. java 填充pdf_Java如何创建和填充PDF表单域(代码示例)

    本篇文章给大家带来的内容是关于Java如何创建和填充PDF表单域(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 表单域,可以按用途分为多种不同的类型,常见的有文本框.多行 ...

  3. html js文件域val,js实现文件上传表单域美化特效

    一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程. 先上几个效果饱饱眼福: 使用方法 这些文件上传域的美化使用的方法都是隐藏原生的元素,然后使用一个元素来制作美化效果. @H_502_ ...

  4. Java 创建、填充PDF表单域

    表单域,可以按用途分为多种不同的类型,常见的有文本框.多行文本框.密码框.隐藏域.复选框.单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据.下面的示例中,将分享通过Java编程在PDF中添加 ...

  5. web之表单form

    表单是我们平常编写Web应用常用的工具,表单(<form>)用来收集用户提交的数据,发送到服务器.比如,用户提交用户名和密码,让服务器验证,就要通过表单.表单是一个包含表单元素或控件的区域 ...

  6. jQuery基本选择器 (实例及表单域 value 的获取)

    jQuery基本选择器包括 CSS选择器.层级选择器和.表单域选择器. 1.CSS选择器 (1)标签选择器 $("div")  $("p")  $(" ...

  7. Java POJO Bean 对象与 Web Form 表单的自动装配

    PS: 我一直在找寻为什么 struts2有自动将form字段和getter setter 自动 匹配的功能, 这篇文章解答了我的疑惑 深度剖析:Java POJO Bean 对象与 Web Form ...

  8. php 美化js文件,js实现文件上传表单域美化特效_javascript技巧

    一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程. 先上几个效果饱饱眼福: 使用方法 这些文件上传域的美化使用的方法都是隐藏原生的元素,然后使用一个元素来制作美化效果. HTML结构 ...

  9. java 填充pdf_Java创建和填充PDF表单域方法

    表单域,可以按用途分为多种不同的类型,常见的有文本框.多行文本框.密码框.隐藏域.复选框.单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据.下面的示例中,将分享通过Java编程在PDF中添加 ...

最新文章

  1. 2140: 学无止境(差分)
  2. spring boot多模块项目一个模块引用另一个模块的实体类报错空指针
  3. SAP WM The Link Between TR and TO Document
  4. 外观模式和代理模式的联系和区别_设计模式之代理设计模式
  5. Hibernate,JPA注解@Entity
  6. CMake-add_executable()
  7. web下拉列表代码_文章列表总结(一)
  8. 核心网upf作用_核心网“入门级”科普,你看了没?
  9. sqlmap-学习1 配置环境
  10. 距离Java开发者玩转 Serverless,到底还有多远?
  11. Atitit 企业文化之道 ---假日文化 attilax总结
  12. python机器学习实战_Python机器学习实战案例
  13. 腐蚀rust服务器命令_腐蚀RUST基本指令及服务器指令大全
  14. 照片调色系列教程(一):打造格调美女
  15. Echarts自定义数据视图(DataView)-按钮名称-刷新方法
  16. 游戏夜读 | 简单认识一下爬虫
  17. 下载安装pip-19.0
  18. 美团招聘CV算法专家/AutoML专家
  19. qt调试android程序崩溃,使用qt5开发的Android应用程序合并了AWS C++库崩溃
  20. 学习matlab(十六)——工具箱(神经网络)

热门文章

  1. 开关电源串模扼流圈、共模扼流圈选择方法
  2. 力扣 547. 朋友圈 c语言 三种解法 深搜 广搜 并查集。
  3. 波奇C语言模拟通讯录设计
  4. Debian11安装mysql5.7
  5. 搜狗workflow项目研究(三)线程池
  6. 如何修改3D模型的原子属性
  7. 计算机无法自动排列,Win10电脑如何设置文件夹不再自动排列|取消电脑文件夹自动排列的方法...
  8. 卸载 Navicat!正版 MySQL 可视化管理工具,功能真心强大!
  9. 在excel 中如何让一串数字真正的变为时间格式
  10. 【纯净版windows系统】U盘启动制作图文教程