zl程序教程

您现在的位置是:首页 >  后端

当前栏目

《Java编码指南:编写安全可靠程序的75条建议》—— 指南4:确保安全敏感方法被调用时参数经过验证

JAVA编码方法程序 指南 参数 建议 调用
2023-09-11 14:17:34 时间
当应用程序代码调用安全敏感方法时,必须验证被传递到方法中的参数。特别是,null值可能会被某些特定的安全敏感方法解读为良性参数,导致覆盖程序默认设置。尽管安全敏感方法应该是防御式编码,但是客户端代码也必须验证参数。如果不这样做,就会导致特权升级,可以执行任意代码。

本节书摘来异步社区《Java编码指南:编写安全可靠程序的75条建议》一书中的第1章,第1.4节,作者:【美】Fred Long(弗雷德•朗), Dhruv Mohindra(德鲁•莫欣达), Robert C.Seacord(罗伯特 C.西科德), Dean F.Sutherland(迪恩 F.萨瑟兰), David Svoboda(大卫•斯沃博达),更多章节内容可以访问云栖社区“异步社区”公众号查看。

指南4:确保安全敏感方法被调用时参数经过验证

当应用程序代码调用安全敏感方法时,必须验证被传递到方法中的参数。特别是,null值可能会被某些特定的安全敏感方法解读为良性参数,导致覆盖程序默认设置。尽管安全敏感方法应该是防御式编码,但是客户端代码也必须验证参数。如果不这样做,就会导致特权升级,可以执行任意代码。

违规代码示例

下面的违规代码示例展示了一个双参数方法doPrivileged(),它的第二个参数是一个访问控制上下文。这段代码的功能是从以前保存的上下文中恢复特权。

AccessController.doPrivileged(

 new PrivilegedAction Void () {

 public Void run() {

 // ...

 }, accessControlContext);```

当传入空的(null)访问控制上下文时,双参数方法doPrivileged()不能仅对之前保存的上下文进行授权。因此,当accessControlContext参数为null时,这段代码可能会导致过度授权。如果程序员打算以一个空的访问控制上下文调用AccessController.doPrivileged()方法,那么必须显式传递一个null参数或使用单参数版本的AccessController.doPrivileged()方法。

####合规解决方案

下面的合规解决方案通过确保accessControlContext不为空,阻止了程序的过度授权。

if (accessControlContext == null) {
throw new SecurityException("Missing AccessControlContext");
}
AccessController.doPrivileged(
new PrivilegedAction() {
public Void run() {
// ...
}
}, accessControlContext);`

必须彻底理解安全敏感方法,并验证它们的参数,以防止意想不到的参数值(如空值)导致的极端情况。如果有意想不到的参数值被传递给安全敏感方法,那么有可能会导致程序可以执行任意代码,还有可能会导致特权升级。


谷粒学苑项目实战(十四):实现阿里云视频点播功能(java编码实现) 视频点播(ApsaraVideo for VoD)是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。
Java中将base64编码字符串转换为图片 前一段时间,在做摄像头拍照上传,摄像头拍的照片为base64编码格式的字符串,需要上传至项目中,则需要使用到将base64编码字符串转换为图片
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。