当安全遇到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#多用于业务系统的开发 ...
随机推荐
- MSB4064 错误
把项目从vs2008转成vs 2012 后,受用msbuild 编译出错 错误Code:MSB4064 修改 把msbuild 的路径从 %windir%\Microsoft.NET\Framewor ...
- C++运算符重载——类型转换
类型转换函数能够实现把一个类 类型 转换成 基本数据类型(int.float.double.char等) 或者 另一个类 类型. 其定义形式如下,注意不能有返回值,不能有参数,只能返回要转换的数据类型 ...
- Python_多进程
Python 多进程库 multiprocessing ,支持子进程.通信.数据共享.执行不同形式的同步 多进程,绕过gil ,实现多核的利用,多进程也是原生进程,由操作系统维护 在pycharm中, ...
- PSO:利用PSO实现对一元函数y = sin(10*pi*x) ./ x进行求解优化,找到最优个体适应度—Jason niu
x = 1:0.01:2; y = sin(10*pi*x) ./ x; figure plot(x, y) title('绘制目标函数曲线图—Jason niu'); hold on c1 = 1. ...
- Jenkins环境搭建(4)-配置定时构建
每次手动触发job构建,是很麻烦的一件事情,job中可以配置定时构建,今天就来分享下定时构建:构建分为两种:定时构建和轮询SCM. 一.定时构建 Jenkins采用了著名的UNIX任务调度工具CRON ...
- C#中new的三种用法
在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员. 3)new ...
- Allegro导入PADS文件
1.打开要转换的PADS文件,并导出ASC文件 全选.格式选择PowerPCB V5.0 2.打开Allegro软件,导入上面生成的ASC文件 单击Translate即可完成转换,目录切换到输出路径, ...
- vue-cli 脚手架 Command Line Interface
mac sudo npm install -g nrm sudo npm config -g set unsafe-perm sudo npm install webpack@3.0.0 -g sud ...
- jquery各版本
各版本下载: https://www.jb51.net/zt/jquerydown.htm
- 如何设置记事本( .txt文件)的默认编码为UTF-8?
1.在桌面新建一个文本文档,不要写入任何内容,然后手动另存为,将此文档编码改为UTF-8,然后将文件名字改为template.txt: 2.再将template.txt移动到C:\Windows\Sh ...