从JavaWeb危险字符过滤浅谈ESAPI使用

摘要:
在另一个重要的XX时期,Web应用程序首次面临安全增强需求。AppScan的安全测试报告非常令人耳目一新,内容全面,提示和建议到位,时间已到中午。当然,有些中国人显然是胡说八道。我想说,在中国互联网上发现的大多数JavaWeb输出过滤器都是一些人自己编写的代码,并不是说他们的代码不好。最好引入已经使用和测试过的相对成熟的组件级代码。换句话说,这些事情与安全相关,不应忽视。

事先声明:只是浅谈,我也之用了这个组件的一点点。

又到某重要XX时期(但愿此文给面临此需求的同仁有所帮助),某Web应用第一次面临安全加固要求,AppScan的安全测试报告还是很清爽的,内容全面,提示建议到位,而且是中午哦,当然有的中文明显狗屁不通。

之前此应用的后端架构相对比较稳固,所以出的重要问题主要出在靠近前端方向的问题,一些类似输出过滤这样的动作做的不到位,需要引入比较成熟的代码专门干这些活,翻了一下吴瀚清的同学《白帽子谈Web安全》推荐了OWASP的ESAPI,这个东西全面叫Enterprise Security API,官网地址:https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API到其主页上看看,好像提供了不少语言的分支版本,我就下了个JavaEE的版本,这个玩意功能很强大,直接来官方文档的特性列表吧:

  1. ThefeaturesinthisreleaseofESAPIforJavaEEinclude:
  2. ESAPICorecomponents
  3. ESAPIlocatorandinterfaceclasses.
  4. ESAPIsecuritycontrolreferenceimplementationsforthefollowingsecuritycontrols:
  5. Authentication
  6. Identity
  7. AccessControl
  8. InputValidation
  9. OutputEscaping
  10. Encryption
  11. RandomNumbers
  12. ExceptionHandling
  13. Logging
  14. IntrusionDetection
  15. SecurityConfiguration
  16. ESAPIWebApplicationFirewall(WAF)component
  17. Fixesforspecificissues.Formoreinformation,see“EnhancementsandResolvedIssues”.

这个组件使用不是直接引入jar就ok,初始化时要读两个配置文件ESAPI.properties和validation.properties,这两个配置文件不一定能在安装指南所示的目录中找到,不过你解压搜索一下dist目录,应该是可以找到的,把这两个文件扔进src目录中就Ok了。

再有什么可说的,来代码,我就用了一下DefaultEncoder中的一些EncodeForXXX功能,基本上都是getInstance()单例方式一句搞定,也没啥好说的,大家看看文档谁都会。那写这Blog干什么?主要想说现在中文网上搜到的关于JavaWeb输出过滤大都是一些人(其实就一个版本)自己写的代码,不是说他的代码不好,引入相对成熟经过一定使用检验的组件级代码总是相对更好一点,再怎么说,这些东西都是安全相关的东东,不可小视。

免责声明:文章转载自《从JavaWeb危险字符过滤浅谈ESAPI使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Selenium 实现鼠标悬浮Win10怎么设置点击任务栏上文件夹图标直接打开“我的电脑”?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

git 系列4(文件提交历史)

1查看文件提交历史记录。如果gitlog命令默认不使用任何参数,gitlog将提交时间中列出的所有更新,最新的更新位于顶部;每次更新都有一个SHA-1校验和、作者的姓名和电子邮件地址以及提交时间。提交说明通过在末尾缩进一段来显示——Stat显示每次更新的文件修改统计信息。您还可以给出几个搜索条件并列出符合条件的提交——提交者只显示与指定提交者相关的提交。...

爬虫发起抓取被服务器拒绝访问返回403禁止访问解决方案

目前,许多网站的API接口返回的http代码返回代码为403,表示禁止访问。如果您也遇到这种情况,请不要急于首先修改网站的相关参数,即高级api的网站。使用浏览器访问。如果浏览器访问api接口,它可以成功。表示已设置权限。接口可能已被修改或无效,此时无法访问。调用此接口时,将捕获异常中的responseBody。数据很可能在该区域。这就是作者遇到的问题。直接...

GERBER文件

GERBER文件GERBER文件是一种国际标准的光绘格式文件,它包含RS-274-D和RS-274-X两种格式,其中RS-274-D称为基本GERBER格式,并要同时附带D码文件才能完整描述一张图形;RS-274-X称为扩展GERBER格式,它本身包含有D码信息。或GERBER描述是防焊层,并且描述之图形主要是防焊部分。若您自己将PCB文件转换成GERBER...

CentOS7 复制文件夹和移动文件夹

CentOS7在Linux中复制、移动和删除文件的命令有:cp、mv、rm I。文件复制命令cp命令格式:cp[-adfilprsu]源文件(source)目标文件(destination)cp[option]source1source2source3…directory参数描述:-a:指存档,即复制所有目录-d:如果源文件是连接文件(linkfile...

neo4j修改密码

输入neo4j提供的可视界面,并输入::serverchange密码。键入原始密码和新密码以修改浏览器。在系统数据库(:usesystem)中,执行以下命令ALTERUSERneo4jSETPASSWORD“mynewpass”:;...

C# Task详解

1.任务线程池的优点与线程相比有很多优点,但线程池不方便使用。例如:◆ ThreadPool不支持线程取消、完成和失败通知等交互操作;◆ ThreadPool不支持线程执行顺序;在过去,如果开发人员想要实现上述功能,他们需要完成大量额外的工作。现在,FCL提供了一个更强大的概念:任务。任务基于线程池执行...