最近公司的项目在的安全检测,涉及到项目安全渗透等方面的问题;

参与项目的渗透等改造,是一个机遇与挑战,今后对与项目安全等方面会思考更多;

下面说说form表单对象提交,为了防止抓包,后台做的类型转化;一个简单的DEMO思路

1、数据库对象bean,属相与数据库中字段相同,有Integer,Boolean,Double等类型

2、form表单的对象formbean,所有属性都是String

3、将formbean的值赋值到bean对象,在赋值过程中对数据的安全性(类型转化的问题)进行判断,

form对象

  1. package february.week1.safe;
  2. /**
  3. * Description: form表单的数据类型
  4. * @Package february.week1.safe
  5. * @author BIQI IS BEST
  6. * @date 2018年2月5日 上午10:38:33
  7. */
  8. public class PersonForm {
  9.  
  10. private String name;
  11.  
  12. private String sex;
  13.  
  14. private String age;
  15.  
  16. private String phoneNumber;
  17.  
  18. private String salary;
  19.  
  20. public PersonForm(String name, String sex, String age, String phoneNumber, String salary) {
  21. super();
  22. this.name = name;
  23. this.sex = sex;
  24. this.age = age;
  25. this.phoneNumber = phoneNumber;
  26. this.salary = salary;
  27. }
  28.  
  29. public PersonForm() {
  30. super();
  31. }
  32.  
  33. public String getName() {
  34. return name;
  35. }
  36.  
  37. public void setName(String name) {
  38. this.name = name;
  39. }
  40.  
  41. public String getSex() {
  42. return sex;
  43. }
  44.  
  45. public void setSex(String sex) {
  46. this.sex = sex;
  47. }
  48.  
  49. public String getAge() {
  50. return age;
  51. }
  52.  
  53. public void setAge(String age) {
  54. this.age = age;
  55. }
  56.  
  57. public String getPhoneNumber() {
  58. return phoneNumber;
  59. }
  60.  
  61. public void setPhoneNumber(String phoneNumber) {
  62. this.phoneNumber = phoneNumber;
  63. }
  64.  
  65. public String getSalary() {
  66. return salary;
  67. }
  68.  
  69. public void setSalary(String salary) {
  70. this.salary = salary;
  71. }
  72.  
  73. @Override
  74. public String toString() {
  75. return "PersonForm [name=" + name + ", sex=" + sex + ", age=" + age + ", phoneNumber=" + phoneNumber
  76. + ", salary=" + salary + "]";
  77. }
  78.  
  79. }

后台对象:

  1. package february.week1.safe;
  2. /**
  3. * Description: 后台类型
  4. * @Package february.week1.safe
  5. * @author BIQI IS BEST
  6. * @date 2018年2月5日 上午10:38:33
  7. */
  8. public class Person {
  9.  
  10. private String name;
  11.  
  12. private String sex;
  13.  
  14. private Integer age;
  15.  
  16. private String phoneNumber;
  17.  
  18. private Double salary;
  19.  
  20. public Person() {
  21. super();
  22. }
  23.  
  24. public Person(String name, String sex, Integer age, String phoneNumber, Double salary) {
  25. super();
  26. this.name = name;
  27. this.sex = sex;
  28. this.age = age;
  29. this.phoneNumber = phoneNumber;
  30. this.salary = salary;
  31. }
  32.  
  33. public String getName() {
  34. return name;
  35. }
  36.  
  37. public void setName(String name) {
  38. this.name = name;
  39. }
  40.  
  41. public String getSex() {
  42. return sex;
  43. }
  44.  
  45. public void setSex(String sex) {
  46. this.sex = sex;
  47. }
  48.  
  49. public Integer getAge() {
  50. return age;
  51. }
  52.  
  53. public void setAge(Integer age) {
  54. this.age = age;
  55. }
  56.  
  57. public String getPhoneNumber() {
  58. return phoneNumber;
  59. }
  60.  
  61. public void setPhoneNumber(String phoneNumber) {
  62. this.phoneNumber = phoneNumber;
  63. }
  64.  
  65. public Double getSalary() {
  66. return salary;
  67. }
  68.  
  69. public void setSalary(Double salary) {
  70. this.salary = salary;
  71. }
  72.  
  73. @Override
  74. public String toString() {
  75. return "Person [name=" + name + ", sex=" + sex + ", age=" + age + ", phoneNumber=" + phoneNumber + ", salary="
  76. + salary + "]";
  77. }
  78.  
  79. }

测试的类:

  1. package february.week1.safe;
  2. /**
  3. * Description: 转化字段的属性,并且捕获异常
  4. * form表单提交时候,数据类型不一致的问题,防止渗透
  5. * @Package february.week1.safe
  6. * @author BIQI IS BEST
  7. * @date 2018年2月5日 上午10:38:33
  8. */
  9.  
  10. import java.lang.reflect.Field;
  11. import java.lang.reflect.Method;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14.  
  15. public class ChangeFilterType {
  16.  
  17. public static void main(String[] args) {
  18. PersonForm personForm = new PersonForm();
  19. personForm.setName("10");
  20. personForm.setSalary("1212123");
  21. personForm.setAge("qwe");
  22. Person person2 = new Person();
  23. changeFilter(personForm,person2);
  24. }
  25.  
  26. private static boolean changeFilter(Object objectForm,Object object2){
  27. Map<String, String> map = getObjectFiled(objectForm);
  28. try {
  29. putValueToBean(map,object2);
  30. } catch (Exception e) {
  31. System.out.println(e.toString());
  32. }
  33. System.out.println(object2.toString());
  34. return false;
  35. }
  36.  
  37. /**
  38. * Description: 获得属性的map,以及属性的值
  39. * @param bean
  40. * @return
  41. * @author BIQI 2018年2月5日 下午2:22:31
  42. * @return TreeMap<String,String> @throws
  43. */
  44. private static Map<String, String> getObjectFiled(Object bean){
  45. Map<String, String> map = new HashMap<>(30);
  46. Field[] fields = bean.getClass().getDeclaredFields();
  47. for(Field field:fields){
  48. // System.out.println(field.getName());
  49. // System.out.println(field.getType().toString());
  50. // System.out.println(getFieldValueByName(field.getName(),bean));
  51. map.put(field.getName(), (String) getFieldValueByName(field.getName(),bean));
  52. }
  53. return map;
  54. }
  55.  
  56. /**
  57. * Description: 属性的值
  58. * @param fieldName
  59. * @param bean
  60. * @return
  61. * @author BIQI 2018年2月5日 上午11:23:15
  62. * @return Object @throws
  63. */
  64. private static Object getFieldValueByName(String fieldName, Object bean) {
  65. try {
  66. String firstLetter = fieldName.substring(0, 1).toUpperCase();
  67. String getter = "get" + firstLetter + fieldName.substring(1);
  68. Method method = bean.getClass().getMethod(getter, new Class[] {});
  69. Object value = method.invoke(bean, new Object[] {});
  70. return value;
  71. } catch (Exception e) {
  72. return null;
  73. }
  74. }
  75.  
  76. /**
  77. * Description: 属性的转化 值的传入
  78. * @param treeMap
  79. * @param bean
  80. * @author BIQI 2018年2月5日 上午11:55:52
  81. * @return void @throws
  82. * @throws Exception
  83. */
  84. public static void putValueToBean(Map<String, String> treeMap,Object bean) throws Exception{
  85.  
  86. Field[] fields = bean.getClass().getDeclaredFields();
  87. // 属性的长度判断
  88. if (fields.length!= treeMap.size()) {
  89. System.out.println("转换的对象不对");
  90. throw new Exception("转换的对象不对");
  91. }
  92.  
  93. for(Field field:fields){
  94. String fieldName = field.getName();
  95. String fieldValue = treeMap.get(fieldName);
  96. String firstLetter = fieldName.substring(0, 1).toUpperCase();
  97. String setter = "set" + firstLetter + fieldName.substring(1);
  98.  
  99. Method method = bean.getClass().getMethod(setter, field.getType());
  100. String type = field.getType().toString();
  101. try {
  102. if ("class java.lang.String".equals(type)) {
  103. method.invoke(bean,fieldValue);
  104. }
  105. if ("class java.lang.Integer".equals(type)) {
  106. if (null == fieldValue || "".equals(fieldValue)) {
  107. method.invoke(bean,0);
  108. continue;
  109. }
  110. Integer temp = Integer.valueOf(fieldValue);
  111. method.invoke(bean,temp);
  112. }
  113. if ("class java.lang.Double".equals(type)) {
  114. if (null == fieldValue || "".equals(fieldValue)) {
  115. method.invoke(bean,0);
  116. continue;
  117. }
  118. Double temp = Double.valueOf(fieldValue);
  119. method.invoke(bean,temp);
  120. }
  121. //其他的类型if(....){}
  122. } catch (Exception e) {
  123. throw new Exception("转换("+bean.getClass().getName()+")的属性:"+fieldName+" 值"+fieldValue+" 出现问题");
  124. }
  125. }
  126. }
  127.  
  128. }

渗透测试,form对象类型转换,简单demo的更多相关文章

  1. RobotFrameWork接口报文测试-----(一)简单demo的实现

    最近几个月的工作任务都是通过使用RF工具来搭建服务器端接口的自动化测试,使用python作为2次开发的语言,也是第一次去做这种项目,经验善浅,还是很有可能会走很多的弯路,为此,我希望自己能把每个阶段的 ...

  2. 简单渗透测试流程演示(445端口、IPC$、灰鸽子)

    目录 一.实验流程 二.实验过程 2.1 信息收集 2.2 利用过程 2.3 暴力破解系统密码之445 2.4 通过木马留后门 一.实验流程 0.授权(对方同意被渗透测试才是合法的.)1.信息收集  ...

  3. xss之渗透测试

    跨站脚本攻击:cross site script execution(通常简写为xss,因css与层叠样式表同名,故改为xss),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用 ...

  4. Python:渗透测试开源项目

    Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工 ...

  5. 渗透测试神器——Burp的使用

    公众号:白帽子左一 版本说明:Burp Suite2.1 下载地址: 链接:https://pan.baidu.com/s/1JPV8rRjzxCL-4ubj2HVsug 提取码:zkaq 使用环境: ...

  6. Spring的简单demo

    ---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...

  7. 从几个方向进行Web渗透测试

    渗透测试就是对系统安全性的测试,通过模拟恶意黑客的攻击方法,来评估系统安全的一种评估方法. 渗透测试可以包括各种形式的攻击,一般来说会有专门的公司提供这种服务,这里整理了几种常见的渗透测试方法,可以对 ...

  8. [TOP10]十大渗透测试演练系统

    本文总结了目前网络上比较流行的渗透测试演练系统,这些系统里面都提供了一些实际的安全漏洞,排名不分先后,各位安全测试人员可以亲身实践如何利用这个漏洞,同时也可以学习到漏洞的相关知识. DVWA (Dam ...

  9. JavaScript常用内置对象(window、document、form对象)

    由于刚开始学习B/S编程,下面对各种脚本语言有一个宏观的简单认识. 脚本语言(JavaScript,Vbscript,JScript等)介于HTML和C,C++,Java,C#等编程语言之间.它的优势 ...

随机推荐

  1. vivi虚拟摄像头驱动程序

    一.vivi虚拟摄像头驱动 基于V4L2(video for linux 2)摄像头驱动程序,我们减去不需要的ioctl_fops的函数,只增加ioctl函数增加的必要的摄像头流查询等函数: #inc ...

  2. AWS上获取监控数据(EC2/RDS都支持)

    方法1:mon-cmd http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/cli/SetupCLI.html(安装连接) ● Step ...

  3. javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

    前言 今天一个朋友让我帮他做一下tomcat的https配置,中间遇到了标题中这个错误,因此记录了一下过程,服务器.域名.证书.tomcat都已经准备好,就是需要配置一下即可,用的是阿里云的证书服务, ...

  4. iOS 真机测试错误“The application bundle does not contain a valid identifier”

    iOS 真机测试错误"The application bundle does not contain a valid identifier" 真机测试的时候报错:"The ...

  5. Spring学习日志之Spring Security配置

    依赖引入 <dependency> <groupId>org.springframework.security</groupId> <artifactId&g ...

  6. Equals()和GetHashCode()方法深入了解

    最近在看Jeffrey Richter的CLR Via C#,在看到GetHashCode()方法的时候,有一个地方不是特别明白,就是重写Equals()方法时为什么要把GetHashCode()方法 ...

  7. RabbitMQ 使用demo

    1.新建一个控制台应用程序:如图 2.代码如下: using RabbitMQ.Client;using RabbitMQ.Client.Events;using System;using Syste ...

  8. FtpUtil.java测试 (淘淘商城第三课文件上传)

    首先在common-taotao中创建一个utils包,复制FtpUtil.java到其中.然后如下: @Test public void testFtpUtil() throws Exception ...

  9. java 跳出多层循环

    lableB: for(int i=0;i<10;i++){ lableA: for(int j=0;j<10;j++){ System.out.println(j); if(j==1){ ...

  10. JEECG 3.7.2版本发布,企业级JAVA快速开发平台

    JEECG 3.7.2版本发布 -  微云快速开发平台 JEECG是一款基于代码生成器的J2EE快速开发平台,开源界"小普元"超越传统商业企业级开发平台.引领新的开发模式(Onli ...