渗透测试,form对象类型转换,简单demo
最近公司的项目在的安全检测,涉及到项目安全渗透等方面的问题;
参与项目的渗透等改造,是一个机遇与挑战,今后对与项目安全等方面会思考更多;
下面说说form表单对象提交,为了防止抓包,后台做的类型转化;一个简单的DEMO思路
1、数据库对象bean,属相与数据库中字段相同,有Integer,Boolean,Double等类型
2、form表单的对象formbean,所有属性都是String
3、将formbean的值赋值到bean对象,在赋值过程中对数据的安全性(类型转化的问题)进行判断,
form对象
package february.week1.safe;
/**
* Description: form表单的数据类型
* @Package february.week1.safe
* @author BIQI IS BEST
* @date 2018年2月5日 上午10:38:33
*/
public class PersonForm { private String name; private String sex; private String age; private String phoneNumber; private String salary; public PersonForm(String name, String sex, String age, String phoneNumber, String salary) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.phoneNumber = phoneNumber;
this.salary = salary;
} public PersonForm() {
super();
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getPhoneNumber() {
return phoneNumber;
} public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
} public String getSalary() {
return salary;
} public void setSalary(String salary) {
this.salary = salary;
} @Override
public String toString() {
return "PersonForm [name=" + name + ", sex=" + sex + ", age=" + age + ", phoneNumber=" + phoneNumber
+ ", salary=" + salary + "]";
} }
后台对象:
package february.week1.safe;
/**
* Description: 后台类型
* @Package february.week1.safe
* @author BIQI IS BEST
* @date 2018年2月5日 上午10:38:33
*/
public class Person { private String name; private String sex; private Integer age; private String phoneNumber; private Double salary; public Person() {
super();
} public Person(String name, String sex, Integer age, String phoneNumber, Double salary) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.phoneNumber = phoneNumber;
this.salary = salary;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getPhoneNumber() {
return phoneNumber;
} public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
} public Double getSalary() {
return salary;
} public void setSalary(Double salary) {
this.salary = salary;
} @Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age + ", phoneNumber=" + phoneNumber + ", salary="
+ salary + "]";
} }
测试的类:
package february.week1.safe;
/**
* Description: 转化字段的属性,并且捕获异常
* form表单提交时候,数据类型不一致的问题,防止渗透
* @Package february.week1.safe
* @author BIQI IS BEST
* @date 2018年2月5日 上午10:38:33
*/ import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map; public class ChangeFilterType { public static void main(String[] args) {
PersonForm personForm = new PersonForm();
personForm.setName("10");
personForm.setSalary("1212123");
personForm.setAge("qwe");
Person person2 = new Person();
changeFilter(personForm,person2);
} private static boolean changeFilter(Object objectForm,Object object2){
Map<String, String> map = getObjectFiled(objectForm);
try {
putValueToBean(map,object2);
} catch (Exception e) {
System.out.println(e.toString());
}
System.out.println(object2.toString());
return false;
} /**
* Description: 获得属性的map,以及属性的值
* @param bean
* @return
* @author BIQI 2018年2月5日 下午2:22:31
* @return TreeMap<String,String> @throws
*/
private static Map<String, String> getObjectFiled(Object bean){
Map<String, String> map = new HashMap<>(30);
Field[] fields = bean.getClass().getDeclaredFields();
for(Field field:fields){
// System.out.println(field.getName());
// System.out.println(field.getType().toString());
// System.out.println(getFieldValueByName(field.getName(),bean));
map.put(field.getName(), (String) getFieldValueByName(field.getName(),bean));
}
return map;
} /**
* Description: 属性的值
* @param fieldName
* @param bean
* @return
* @author BIQI 2018年2月5日 上午11:23:15
* @return Object @throws
*/
private static Object getFieldValueByName(String fieldName, Object bean) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = bean.getClass().getMethod(getter, new Class[] {});
Object value = method.invoke(bean, new Object[] {});
return value;
} catch (Exception e) {
return null;
}
} /**
* Description: 属性的转化 值的传入
* @param treeMap
* @param bean
* @author BIQI 2018年2月5日 上午11:55:52
* @return void @throws
* @throws Exception
*/
public static void putValueToBean(Map<String, String> treeMap,Object bean) throws Exception{ Field[] fields = bean.getClass().getDeclaredFields();
// 属性的长度判断
if (fields.length!= treeMap.size()) {
System.out.println("转换的对象不对");
throw new Exception("转换的对象不对");
} for(Field field:fields){
String fieldName = field.getName();
String fieldValue = treeMap.get(fieldName);
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String setter = "set" + firstLetter + fieldName.substring(1); Method method = bean.getClass().getMethod(setter, field.getType());
String type = field.getType().toString();
try {
if ("class java.lang.String".equals(type)) {
method.invoke(bean,fieldValue);
}
if ("class java.lang.Integer".equals(type)) {
if (null == fieldValue || "".equals(fieldValue)) {
method.invoke(bean,0);
continue;
}
Integer temp = Integer.valueOf(fieldValue);
method.invoke(bean,temp);
}
if ("class java.lang.Double".equals(type)) {
if (null == fieldValue || "".equals(fieldValue)) {
method.invoke(bean,0);
continue;
}
Double temp = Double.valueOf(fieldValue);
method.invoke(bean,temp);
}
//其他的类型if(....){}
} catch (Exception e) {
throw new Exception("转换("+bean.getClass().getName()+")的属性:"+fieldName+" 值"+fieldValue+" 出现问题");
}
}
} }
渗透测试,form对象类型转换,简单demo的更多相关文章
- RobotFrameWork接口报文测试-----(一)简单demo的实现
最近几个月的工作任务都是通过使用RF工具来搭建服务器端接口的自动化测试,使用python作为2次开发的语言,也是第一次去做这种项目,经验善浅,还是很有可能会走很多的弯路,为此,我希望自己能把每个阶段的 ...
- 简单渗透测试流程演示(445端口、IPC$、灰鸽子)
目录 一.实验流程 二.实验过程 2.1 信息收集 2.2 利用过程 2.3 暴力破解系统密码之445 2.4 通过木马留后门 一.实验流程 0.授权(对方同意被渗透测试才是合法的.)1.信息收集 ...
- xss之渗透测试
跨站脚本攻击:cross site script execution(通常简写为xss,因css与层叠样式表同名,故改为xss),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用 ...
- Python:渗透测试开源项目
Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工 ...
- 渗透测试神器——Burp的使用
公众号:白帽子左一 版本说明:Burp Suite2.1 下载地址: 链接:https://pan.baidu.com/s/1JPV8rRjzxCL-4ubj2HVsug 提取码:zkaq 使用环境: ...
- Spring的简单demo
---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...
- 从几个方向进行Web渗透测试
渗透测试就是对系统安全性的测试,通过模拟恶意黑客的攻击方法,来评估系统安全的一种评估方法. 渗透测试可以包括各种形式的攻击,一般来说会有专门的公司提供这种服务,这里整理了几种常见的渗透测试方法,可以对 ...
- [TOP10]十大渗透测试演练系统
本文总结了目前网络上比较流行的渗透测试演练系统,这些系统里面都提供了一些实际的安全漏洞,排名不分先后,各位安全测试人员可以亲身实践如何利用这个漏洞,同时也可以学习到漏洞的相关知识. DVWA (Dam ...
- JavaScript常用内置对象(window、document、form对象)
由于刚开始学习B/S编程,下面对各种脚本语言有一个宏观的简单认识. 脚本语言(JavaScript,Vbscript,JScript等)介于HTML和C,C++,Java,C#等编程语言之间.它的优势 ...
随机推荐
- Nginx的虚拟服务器域名配置
虚拟服务器名(server name)是通过指令server_name来指定的.在< Nginx是如何处理Request的?>一节中,我们讲到nginx分两步来匹配过来的Request请求 ...
- Spring-Blog:个人博客(一)-Mybatis 读写分离
概述: 2018,在平(tou)静(lan)了一段时间后,开始找点事情来做.这一次准备开发一个个人博客,在开发过程之中完善一下自己的技术.本系列博客只会提出一些比较有价值的技术思路,不会像写流水账一样 ...
- 初识DJango——Web框架
一.Web框架 HTTP特点 1.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联系的类型不同. 由于HTTP协议简单 ...
- ESLint 使用入门 - 来自推酷
在团队协作中,为避免低级 Bug.产出风格统一的代码,会预先制定编码规范.使用 Lint 工具和代码风格检测工具,则可以辅助编码规范执行,有效控制代码质量. 在以前的项目中,我们选择 JSHint 和 ...
- 【JavaScript 实现倒计时(天、时、分、秒)】
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- bzoj 4605: 崂山白花蛇草水
Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实 力,他轻松地进了山东省省队,现在便是他履行诺言的时 ...
- [bzoj3048] [Usaco2013 Jan]Cow Lineup
一开始一脸懵逼.. 后来才想到维护一左一右俩指针l和r..表示[l,r]这段内不同种类的数字<=k+1种. 显然最左的.合法的l随着r的增加而不减. 顺便离散化,记一下各个种类数字出现的次数就可 ...
- 最长上升子序列(LIS) dp学习~3
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 Super Jumping! Jumping! Jumping! Time Limit: 200 ...
- c++(排序二叉树线索化)
前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作.二叉树插入.二叉树删除1.删除2.删除3.但是排序二叉树也不是没有缺点,比如说,如果我们想在排序二叉树中删除一段数据的节点怎么 ...
- [国嵌攻略][156][I2C自编设备驱动设计]
AT24C08的驱动在Linux内核中已经提供,在/drivers/misc/eeprom/at24.c文件中.在对应的probe函数中有一个创建/sys/.../eeprom文件的函数,应用程序通过 ...