当安全遇到java
标题是随便取的
今天看到有篇文章写的是关于java的xss,文中还提到了一个面试题,刚好我曾经也被问到过这个问题。让我不禁想起以往遇到的一些和java相关的安全面试题。
现如今,很多大甲方,由于自己系统大部分都是java写的,所以他招安全人员时,都会提到熟悉java或java代码审计 加分。
那么既然他要求你会,必定面试时会有些针对性的问题,由于我面过两家这样的公司,这里将我需要的一些问题写出来,同时页会写出自己的思路
问题一:mybatis熟悉吗?其中得# 和 $有什么区别
#是参数j化查询,也就是dbc中的预编译
$是字符串拼凑,存在sql注入的风险
问题二:那有了#为什么还要$呢
这个问题我当时是懵逼的,后来才知道别人想问的可能是看你知道不知道哪些情况下不能用#(当然也有可能我到现在都还没get到他的点)
关于这个请看我之前写的博客 https://www.cnblogs.com/jinqi520/p/10083751.html
问题三:java项目测试中发现了几十个或者更多的xss漏洞怎么办
我不记得是不是说的java项目了,就当是java项目吧,反正差别不大,都是加拦截器,这里以java项目为例说下如何加filter
这里需要说下为什么是加filter而不是输出转义或编码,这是因为当项目上线后再在各漏洞处添加输出过滤函数工作量很大且容易遗漏(能出现几十个xss漏洞说明几乎所有地方都没考虑)
1.在web.xml中配置一个filter,拦截所有请求

2.实现该XSSFilter,filter中实现dofilter方法 使用装饰类xssFilterWrapper替换ServletRequest

3.实现xssFilterWrapper继承HttpServletRequestWrapper,并重写getParameterValues方法,对获取参数进行过滤(spring自带的HtmlUtils类的htmlEscape,也可以用OWASP提供的api)

问题四:拦截器和过滤器的区别
1.拦截器是基于java反射机制来实现的,而过滤器是基于函数回调来实现的。(有人说,拦截器是基于动态代理来实现的)
2.拦截器不依赖servlet容器,过滤器依赖于servlet容器。
3.拦截器只对Action起作用,过滤器可以对所有请求起作用。
4.拦截器可以访问Action上下文和值栈中的对象,过滤器不能。
5.在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时调用一次。
问题五:HashMap和Hashtable的区别
HashMap不是线程安全的,但是它的效率会比Hashtable要好很多
问题六:你做java项目的代码审计,一般流程是什么
这个自由发挥吧。。
问题七:java的反序列化漏洞怎么挖
这个我忘记是怎么问的了,大概分为黑盒和白盒:
黑盒一般就是使用ysoserial生成poc(大概十几个),一个个去尝试,当然burp中有插件集成了ysoserial,但是由于长时间未更新,部分poc是用不了的,需要自己改下代码
白盒一般就是看第三方jar包,根据jar选poc,使用ysoserial生成对应的payload,然后利用
问题八:问了一些struts历史cve的调试,等等 未完待续吧,有合适的我再加上了
当安全遇到java的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- SQL反模式学习笔记10 取整错误
目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...
- seata-server安装、运行(ubuntu)
seata-server为seata中的事务协调器. seata的wiki https://github.com/seata/seata/wiki/Home_Chinese 一.下载并安装 wget ...
- docker报Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.19)
docker version Client: Version: 17.05.0-ce API version: 1.24 (downgraded from 1.29) Go version: go1. ...
- 动态规划-数位DPwindy
https://vjudge.net/contest/297216?tdsourcetag=s_pctim_aiomsg#problem/L #include<bits/stdc++.h> ...
- [LeetCode] Quad Tree Intersection 四叉树相交
A quadtree is a tree data in which each internal node has exactly four children: topLeft, topRight, ...
- react路由
针对多个列表导航公用一个组建,然后 有两种路由方式 1.import {HashRouter as Router,Route,Link} from 'react-router-dom' 不过这个路由中 ...
- 使用Java程序读取JPG Tif等格式图片的exif信息
package com.util; import java.io.File;import java.util.Iterator; import com.drew.imaging.ImageProces ...
- Spark 实现wordcount
配置完spark之后,使用spark实现wordcount,这一部分完全参考<深入理解Spark:核心思想与源码分析> 依然使用hadoop wordcountTest的那几个txt文件 ...
- SSIS - 1.简介
一.什么是SSIS? 1)SSIS全称为Microsoft SQL Server Integration Services. 2)ETL全称为Extraction, Transformation an ...
- linux定时备份mysql数据并同步到其他服务器
(备份还原操作) ###导出数据库 /usr/bin/mysqldump -u root -pwd database > database20180808.sql ###导入数据库 mysql ...