代码审计与web安全-第二章-作业
1.导致代码缺陷的原因主要包括(BCD)
A采用SDL
B 程序员的开发经验和技术水平
C项目中引入开源代码,导致开源漏洞
D项目发布前通常进行功能和性能测试,没有安全测试
导致代码缺陷的原因可能包括多种因素,其中:
B 程序员的开发经验和技术水平:程序员的技术能力和经验水平直接影响代码质量。经验丰富的程序员可能会写出更稳定、更少缺陷的代码。
C 项目中引入开源代码, 导致开源漏洞:使用开源代码可以加快开发进程,但如果不对引入的代码进行适当的审查和测试,可能会引入安全漏洞。
D 项目发布前通常进行功能和性能测试,没有安全测试:如果在发布前只进行功能和性能测试而忽略了安全测试,可能会遗漏一些安全相关的缺陷。
而A 采用SDL(安全开发生命周期)通常是减少软件缺陷的做法,因为它包括了安全考虑在内的整个软件开发过程。所以,正确的选项应该是 B, C, 和 D
2.常见的源代码缺陷包括( ACD) 三类
A输入验证
B 输出验证
C资源审计
D代码质量
常见的源代码缺陷通常可以分为以下三类:
A 输入验证:不恰当的输入验证可能导致各种安全问题,如SQL注入、跨站脚本(XSS)等。
C 资源审计:不正确的资源管理和审计可能导致资源泄露,如内存泄露、文件描述符泄露等。
D 代码质量:低质量的代码可能包含更多的缺陷,影响程序的稳定性和性能。
而B 输出验证通常不被视为源代码缺陷的一类,因为它关注的是信息的输出安全,而不是源代码本身的问题。所以,正确的选项应该是 A, C, 和 D。
3.you can’t manage what you can’t measure是(B)的名言
A李李宏
B彼得德鲁克
C雷军
D丁杰克逊
这句名言 “you can’t manage what you can’t measure” 经常被归功于管理思想家 彼得德鲁克 (Peter Drucker)。因此,正确的选项是 B 彼得德鲁克。不过,值得注意的是,有些资料指出这句话可能被误归于他,实际上德鲁克并没有直接说过这句话。但无论如何,这句话确实与他的管理理念相符,强调了衡量和追踪成功的重要性
4.程序接收的数据可能来源于( ABCD) 。如果未对程序接收的数据进行校验,则可能会引发安全问题。
A合法用户户输入
B经验证的用户
C网络连接和其他不受信任的来源
D系統数据文件
程序接收的数据可能来源于多个渠道,如果未对这些数据进行校验,则可能会引发安全问题。正确的选项是:
A 合法用户输入:即使是合法用户的输入,也可能无意中包含有害的数据,因此需要进行校验。
C 网络连接和其他不受信任的来源:来自网络连接或其他不受信任来源的数据可能包含恶意内容,需要进行严格的验证。
D 系统数据文件:系统数据文件虽然看似可靠,但如果被恶意修改,同样可能成为安全风险。
而B 经验证的用户通常指的是已经通过身份验证的用户,其数据相对可信,但仍然需要进行必要的安全检查。因此,最全面的答案应该包括 A, B,C, 和 D。
5.对于无法确定固定格式的变量,一定要进行( D) 处理。
A语法检查
B格式检查
C字符串长度
D特殊符号过滤或转义
对于无法确定固定格式的变量,最重要的处理是 D 特殊符号过滤或转义。这是因为特殊符号,如果不经过适当处理,可能会导致安全漏洞,如SQL注入攻击。过滤或转义这些符号可以防止恶意用户利用程序中的安全漏洞来执行未授权的命令或访问数据。所以,正确的选项是 D。
6.( A) 攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript. ActiveX、 Flash 或者甚至是普通的HTML。
A XSS
B CSS
C CSRF
D SQL注入
这种攻击被称为 XSS,全称是跨站脚本攻击(Cross-Site Scripting)。XSS攻击允许攻击者将恶意脚本注入到其他用户会浏览的正常网页中。当其他用户加载并执行这些恶意网页程序时,攻击者可以窃取cookie、会话令牌,甚至完全接管受害者的会话。XSS攻击通常利用网站对用户输入的处理不当,特别是当网站输出未经适当清理或转义的用户输入时。所以,正确的选项是 A。
7.当一个变量指向一个NULL值,使用这个变量的时候又没有检查,这时会导致( C)
A缓冲区溢出
B栈溢出
C空指针异常.
D系统错误
当一个变量指向一个NULL值,并且在使用这个变量时没有进行检查,这通常会导致 C 空指针异常。空指针异常发生在尝试访问或操作一个没有指向任何对象的变量时,这是一种常见的编程错误。所以,正确的选项是 C。
8.(D) 中的敏感信息,如密码,服务器的地址和加密密钥,可能会泄露给攻击者。敏感信息均必须存在在配置文件或数据库中。
A用户加密
B软编码
C UNICODE
D硬编码
敏感信息,如密码、服务器地址和加密密钥,如果直接硬编码在源代码中,可能会被攻击者发现并利用。因此,敏感信息应该存储在配置文件或数据库中,以便可以更安全地管理和更改,而不是直接写入代码。正确的选项是 硬编码。这种做法不安全,因为它使得敏感信息容易被访问和修改。所以,正确的选项是 D。
9.SQL注入攻击的本质,是(C ) 。根本解决办法是预编译,也就是sq|语句事先编译好了,随后传入参数填坑,不会重新再编译,也就
不会有sql注入: select, update, delete, insert等
A注入的数据是全部是字符型数据
B用户可以定义数据库的命令
C 程序把用户输入的数据当作代码执行
D语法规定太宽泛
SQL注入攻击的本质是 程序把用户输入的数据当作代码执行。这种攻击发生是因为应用程序没有正确地将用户输入与代码分离,导致攻击者能够插入或“注入”恶意的SQL命令,这些命令会被数据库执行。预编译(也称为参数化查询)是防止SQL注入的有效方法,因为它确保了用户输入只会被处理为数据,而不是作为SQL代码的一部分来执行。所以,正确的选项是 C。
10.异常处理,也称为(A )
A错误处理
B系统故障
C代码缺陷
D内存泄露
异常处理通常也称为 错误处理。它是编程中的一种机制,用于处理程序执行过程中发生的异常情况,如运行时错误。异常处理使得程序能够在遇到错误时优雅地恢复或退出,而不是直接崩溃。所以,正确的选项是 A。
11.异常处理的基本模型包括(BC)两类。
A内存溢出、系统崩溃.
B终止模型
C恢复模型
D SDL、CND
异常处理的基本模型主要包括两类:B 终止模型和C 恢复模型。
终止模型:在这种模型中,当异常发生时,程序不会回到异常发生的地方继续执行。异常要么被抛出,要么被当前的处理程序捕获并处理。
恢复模型:在恢复模型中,异常被修正后,程序可能会重新调用出现异常的方法,尝试再次执行。
因此,正确的选项是 B 和 C。