Java安全编码规范考试
试题组成:20道单选题,3分/题; 10道多选题,3分/题 ; 10道判断题,1分/题,考试总分100分,通过考试80分,考试时间90分钟
- 由于序列化将对象愉出为二进制数据流而非可读的明文形式,所以在传愉或保存序列化的敏感数据时不霖要加密。 [判断题] *
- 编写自定义类加载器时应调用超类的 getPermission 函数. [判断题] *
- Java 代码中引用空指针时会抛出 NullpointExcePtion ,只要处理该类异常即可,无需在代码中解决。 [判断题] *
- 只要使用了业界认可的持久化框架,如Hibernate、Mybatis,就可以避免SQL注入。 [判断题] *
- 在程序中对zip 文件进行解压的时候,只需要判断和限制 zip 文件本身的大小即可。 [判断题] *
- 如果代码中需要用到外部输入来拼接特定格式的XML文档,为了防止 XML 注入,可以使用对应的DTD 或者 Schema 文件对最终生成的 XML 校验。 [判断题] *
- 当实现 Socket 通信模块时,若需要保证传愉数据的安全性,可以考虑使用 java.net.Socket来建立安全的网络传愉通道。 [判断题] *
- 使用正则对外部输入进行校验是常用的方式,所以正则可以随意使用,不会产生安全风险。 [判断题] *
- 翰入校验是一个非常好的安全编码原则,可以预防 SQL 注入、命令注入、死循环等几乎所有典型问题 [判断题] *
- File.getAbsolutePath()可正确对文件路径进行标准化处理 [判断题] *
- 日志注入的攻击方式与下列哪类攻击最相似: () [单选题] *
A. XSS |
B. CSRF(正确答案) |
C. CRLF Injection |
D. DOS |
- 下面对线程同步描述错误的是: () [单选题] *
A. 同步方法与基于 this 引用的同步代码块使用的是相同的锁 |
B. 使用 private final的锁对象更安全 |
C. Java 中一般会使用同步方法或同步代码块实现线程同步操作 |
D. 对于单例模式的 Java 类,即使该类对象可暴露给不可信代码,使用同步方法可以正确进行线程同步(正确答案) |
- 编码( encoder)可以防御哪些攻击?() [单选题] *
A. 信息泄露 |
B. CSRF |
C. XSS、SQL注入(正确答案) |
D. 文件上传 |
- 输入过滤不可以防止以下哪种漏洞?() [单选题] *
A. XSS |
B. sql注入 |
C. XML注入(正确答案) |
D. CSRF |
- 下列堋个场景可以使用java.util.Random类产生的随机数?() [单选题] *
A. 随机选取路由(正确答案) |
B. WEB应用会话标识符 |
C. 挑战算法中的随机数生成 |
D. 验证码的随机数生成 |
- 下列堋些手段不能防止SQL注入的发生:() [单选题] *
A. 使用存储过程(正确答案) |
B. 使用参数化查询预编译固化查询逻辑 |
C. 使用白名单校验对输入数据进行限制 |
D. 对外部输入中的特殊字符进行转义 |
- 下列哪项危害不是,不正确的构造正则可能会导致的安全风险() [单选题] *
A. ReDos攻击 |
B. CSRF |
C. 正则注入 |
D. 敏感信息泄露(正确答案) |
- 下面哪种防护措施对XML注入没有防护作用() [单选题] *
A. 使得dom4j等xml库对xml进行编辑 |
B. 对外部输入进行白名单校验 |
C. 在拼接xml字符里前,对外部输入进行转码处理 |
D. 将不可信数据拼接xml字符串,在解析前对xml字符串进行转码处理(正确答案) |
- 下列对线程操作的描述,正确的是() [单选题] *
A. 同步方法或使用对象内置锁的同步代码块中,不需要考虑锁释放的问题(正确答案) |
B. 使用非线程安全的方法来覆写线程安全的方法 |
C. 直接调用Thread.run方法可以后动一个线程 |
D. 推荐使用Thread.stop()来终止线程 |
- 关于输入校验原则描述错误的是() [单选题] *
A. 不要依赖服务端检验(正确答案) |
B. 不要依赖客户端检验 |
C. 可以采用正则表达式检验 |
D. 假设所有输入都是恶意的 |
- 若一个实现了Serializable接口的类中包含有敏感信息宇段,为了防止该类对象被序列化时导致敏感信息泄露,可以使用下面哪个个关键宇来修饰该宇段() [单选题] *
A. private |
B. volatile |
C. transient(正确答案) |
D. static |
- 对于不安全反序列化漏洞的防护描述错误的是:() [单选题] *
A. 对不可信的XML数据进行反序列化操作,推荐使用XStream实现,该组件支持白名单检查,新版本也提供了默认安全校验机制 |
B. 对不可信的Json数据进行反序列化操作,可通过禁止开启type功能进行防护 |
C. 使用JDK原生API进行反序列化操作,涉及不可信数据时,可以重载ObjectlnputStream的resolveClass()方法,在该方法中对目标class进行白名单校验 |
D. XMLDecoder是JDK原生类,提供了XML的反序列化操作,所以相对XStream ,更推荐使用XMLDecoder进行XML数据的反序列化操作(正确答案) |
- String sql=”select * from product where id=”+Integer.parseInt(request.getParameter(“id”))该代码存在什么样的安全问题:() [单选题] *
A. XSS |
B. SQL注入 |
C. 无SQL注入风险,但是将string$专化为int型变量时可能会有NumberFormatException抛出(正确答案) |
D. 无安全风险 |
- 对于XXE(XML External Entity)漏洞的描述,不正确的是:() [单选题] *
A. XML外部实体可以利用file协议获取磁盘中的文件,达到获取敏感信息的目的 |
B. XML外部实体,如果不直接在XML节点中返回实体内容,不会造成信息泄露风险(正确答案) |
C. 利用XML外部实体可以对内网端进行扫插 |
D. XML外部实体利用file、http协议等可造成DOS攻击 |
- 下列那类异常不属于敏感异常() [单选题] *
A. MissingResourceException(正确答案) |
B. IOException |
C. FileNotFoundException |
D. SQLException |
- 下列对SQL注入防护措施中的转码描述正确的是() [单选题] *
A. 转码仅对拼接SQL语句中,单引号或双引号限制的字段生效(正确答案) |
B. 转码对表名、字段等不乱用于参数化的场景是优先的方案 |
C. 转码是优选的SQL注入防护措施 |
D. 在拼接SQL语句前进行转码,可以彻底解决SQL注入问题 |
- 关于JAVA序列化与反序列化错误的是:() [单选题] *
A. 不要序列化未经加密的敏感数据 |
B. transient关键字可以阻止变量被序列化到文件中 |
C. 对象的序列化结果是可以在网络中进行传输的字节序列 |
D. 反序列化的输入数据可以由外部输入指定(正确答案) |
- 如果将脚本指令插入到WEB应用程序URL ,并且注意到该脚本指令可以在页面环境中执行,可能会发生下列哪种攻击 ? () [单选题] *
A. SQL注入 |
B. 反射型跨站脚本(正确答案) |
C. 会话动持 |
D. 持久型跨站脚本 |
- 下面对敏感数据记录曰志,描还正确的是() [单选题] *
A. 敏感信息记录日志时,直接将信息内容替换等长的*即可 |
B. 做好日志访问权限控制,日志可以记录敏感信息 |
C. 敏感信息加密后可以记录日志 |
D. 日志中如果必须记录敏感信息,需使用长度固定的*替代(正确答案) |
- 若程序中需要获取操作系统用户名,应采取下列哪种方法来获取:() [单选题] *
A. 提示用户输入 |
B. 由环境变畺获取:System,getenv( “USER”) |
C. 由JVM属性获取:System.getProperty( “user.name”)(正确答案) |
D. 启动程序的时候由程序参数传入 |
- 当直接将外部输入作为参数传递给java.Iang.Runtime.exec()方法的时候易引入下列娜些攻击类型的漏洞:()【多选题】 *
A. SQL注入 |
B. XML注入 |
C. 命令注入(正确答案) |
D. 参数注入攻击(正确答案) |
- 下列哪些操作场景需要进行安全检查?()【多选题】 *
A. 修改文件校限(正确答案) |
B. 修改登录密码(正确答案) |
C. 删除日志文件 |
D. 记录日志数据(正确答案) |
- 常见的XML实体解析导致的安全风险有哪几种?()【多选题】 *
A. 内部实体扩展(正确答案) |
B. XXE(正确答案) |
C. xPath注入(正确答案) |
D. XML注入(正确答案) |
- 对于文件IO操作,下列哪些说法是正确的()【多选题】 *
A. 临时文件使用完毕应该及时删除(正确答案) |
B. 避免让外部进程阻塞在输入输出流上(正确答案) |
C. 避免在共享目录操作文件(正确答案) |
D. 创建文件时制定合理的访问权限(正确答案) |
- 下列哪个场景可能导致信息泄露?()【多选题】 *
A. 用户输入(正确答案) |
B. 进程间的通信数据 |
C. 用户态输入(正确答案) |
D. 外部调用的参数(正确答案) |
- 以下哪些场景可能会导致攻击者绕过安全检查:()【多选题】 *
A. 只检查当前调用者(正确答案) |
B. 检查整个调用栈 |
C. Java applets允许给自己授权任意代码(正确答案) |
D. 覆写安全检查执行的方法(正确答案) |
- 安全编程规范中,下面说法正确的有()【多选题】 *
A. 记录日志时可以抛出异常 |
B. 禁止不受信任的代码直接终止JVM(正确答案) |
C. 创建文件时指定合理的访问权限(正确答案) |
D. 对所有外部输入进行校验(正确答案) |
- 对数组下标校验,要考虑以下情况:()【多选题】 *
A. 要考虑是否超过数组上限(正确答案) |
B. index值类型最好定义为unsigned类型(正确答案) |
C. 要考虑不为负值(正确答案) |
D. 若有循环运算等操作,要考虑运算结果是否为溢出或者反转(正确答案) |
- 目录遍历攻击可以直接带来哪些危害:()【多选题】 *
A. 攻击者可以访问受限目录和文件(正确答案) |
B. 攻击者可以改变程序的运行逻辑(正确答案) |
C. 攻击者可以执行恶意的命令(正确答案) |
D. 攻击者以窃取内存中数据 |
- 多线程并发读写某个整型变量,说法正确的是()【多选题】 *
A. 通过传统的synchronized加锁保证线程安全(正确答案) |
B. 整型的++操作是非线程安全的(正确答案) |
C. 可以通过Atomiclnteger提供的原子操作保证线程安全(正确答案) |
D. 整型本身就是原子的,不需要额外加锁 |