选课类别:计划内与自由选修 | 教学类型:理论实验课 |
课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
课程层次:专业选修 | 学分:3.0 |
本课程从攻击和防御的思想与原理出发,介绍主要的计算机和网络空间安全的基础知识,包括软件安全、Web安全和网络安全。
在软件安全方面,主要介绍6个方面的内容:Set-UID特权程序原理及攻击方法、通过环境变量实现攻击、缓冲区溢出攻击、return-to-libc攻击、格式化字符串漏洞、竞态条件漏洞。
在Web安全方面,主要介绍3个方面的内容:跨站请求伪造、跨站脚本攻击、SQL注入攻击。
在网络安全方面,主要介绍5个方面的内容:数据包嗅探和伪造、防火墙、虚拟专用网络、公钥基础设施、传输层安全。
这是 25 春新开的课,所以没有任何前人的经验,我也算是刚开课就来选的探险者了。
今年选课的人也不多(总共就 13 个人),但是课程是安排在大教室的,所以每次上课都感觉教室里空空荡荡的,加上老师也是基本以念 PPT 和对着 PPT 展示实验为主,因此大家都不怎么听,都在做自己的事情,估计是中间某一次课老师看到的人太少了,之后就经常在下课时点名了。
课程的信息量很少,感觉比同样是期末开卷的人工智能要少得多,但是每一周结束后都会有一次作业,大概是两三题的样子,也不用占用多少时间,借助 DeepSeek 的力量,顶多半个小时就能搞定。以及课程有 4 次线下实验,也是有签到的,实验内容都很简单,而且实验指导书也写得很详细了,对着一步一步操作基本上就可以无脑把实验做完,然后边做实验边截图就可以无脑把实验报告搞定,因此整个实验基本都可以无脑地在一两个小时的时间内完成,不需要占用更多的时间。
期末考试是开卷,有 64 分的填空题,考试前一天把所有的 PPT 都打印下来,考试的时候把打印的材料和课本都带过去,这 64 分的填空题基本上在前半个小时翻翻书就能搞定了。剩下的是 20 分的简答题和 16 分的实验题,老师推荐的做题顺序是先做 64 分的简答题,然后做 16 分的实验题,最后做 20 分的简答题。但是我做的时候感觉简答题更好写一些,基本都是些描述性的东西,还有 5 分可以在 PPT 上找到原话直接抄就行,但是实验题反而比较复杂,是 8 个空每空 2 分,直接丢过来一长串 gdb 的输出然后问你一些栈地址内存地址相关的东西,特别是这些 gdb 输出还有一部分被和谐了,导致只能从蛛丝马迹中找到一些空的答案,因此这部分题反而花了我挺长时间的。不过大概有一半的人都提前交卷了,我是不想提前交卷就坚守到了最后一刻。
最后的给分只能说一般吧,正常来说 15 人以下的课应该是不限制优秀率的,但是老师还是按照限制优秀率给的分,而且原话是“参考期末成绩和教务处规定优秀率不超过 40%(只能有 5 人优秀)进行调整”,总感觉这句话的意思是按照比例算出来有不止 5 个人超过 85 分的,因此做出了调整(也就是向下调分),所以出分前还挺忐忑的,不过最后分数出来也符合预期,就是不知道是不是存在向下调分卡优秀率的情况了。
感觉之后这门课选的人应该会更多,想要教材的学弟学妹也可以在评论区留言(反正教材是我考试前才买的,考完试就不用了,几乎全新)。
2025 春新开课,选的人不多,前面几次课没有点名,不过学期中有次似乎是老师发现来的人太少了,于是之后就一直都点名了(悲),那么保守估计秋季再开的时候也不排除点名的可能,加上老师上课主要是念 PPT,因此对于后面选课的同学可能是个参考。
课程内容在简介里面都有,所以不再赘述。如果要用一句话简单概括,那么可以从 PPT 中找到这样的内容:
进攻就是最好的防御。
对,这门课程相比计科传统课程的一大特色就是教你如何实施攻击,这一点对于已经把“数组下标绝不能越界”刻在脑子里的 Coder 来说,或许是个非常新的概念 —— 程设只告诉你 gets
不安全、下标越界不安全,“会发生很可怕的事情,所以千万不要去试!”,这门课恰好补上了这部分缺少的内容,它告诉你这些 UB(未定义行为)并不是绝不能触碰的红线,规则之外的东西也并非无迹可循:漏洞不止会破坏一些东西,它还能用来做许多事情(比如格式化字符串修改任意变量),因此就这个意义上来说,这门课程在观念启发上的作用比它所教授的内容本身更有意义。
课程每周都有作业,基本上只是两三道简答题,一两句话就能回答,参考 PPT 基本可以在十分钟内完成。
课程共四次实验,需要线下参加,分别是环境变量攻击、缓冲区溢出攻击、格式化字符串漏洞攻击和 VPN 实验,总的来说比较简单,跟着实验指导书来可在 1-2 小时内搞定。
期末考试为开卷考试,估计至少有 60 分的内容可以在 PPT 上找到,感觉更像中学政治考题,只要在书上找到原话套进去即可,虽然考试没有太多思考过程,但谁不喜欢简单的卷子呢(
总的来说,本课程难度不大,内容收获相对多,平时工作量中等,考试比较简单,前置知识基本只要求 C 语言,且提供 3 学分,适合任何对本课程内容感兴趣的同学选择。