人人都能学编程
English 开始学习
专项 · 网络安全第 1 课 / 共 9 课免费阅读

威胁与风险 · 网络安全入门

我们到底在保护什么?防的又是什么?

课程目录

为什么需要它

安全从写代码之前就开始了:先说清楚可能出什么问题。这门课后面的每一课(哈希、注入、日志、防火墙)都在保护三样东西中的一样,知道是哪一样,你才知道先修什么。

整门课只有一条规矩:只测试你自己的系统,或者拿到书面授权的系统。这里所有练习都在你的浏览器里运行,用的都是为课程编出来的数据。

直觉理解

想象一下你的日记本。

  • 机密性:只有你能看。
  • 完整性:别人改了哪一页,你一定能发现。
  • 可用性:想翻开的时候它就在。

威胁是任何可能破坏这三点的东西:小偷、洪水、程序漏洞。风险是这个威胁该让你担心到什么程度:发生的可能性乘以后果的严重程度。问题不可能一次全修完,所以先给风险打分,从最大的开始修。

定义

CIA 三要素

Confidentiality, integrity and availability: the three properties security protects. Data is kept secret from the wrong people, unchanged by the wrong people, and reachable by the right people.
机密性、完整性、可用性:安全要保护的三种性质。数据不被不该看的人看到,不被不该改的人改动,该用的人随时用得上。

风险 Risk

A simple risk score is likelihood × impact, each rated on a small scale such as 1 to 5. Higher scores are fixed first.
最简单的风险分数是:可能性 × 影响,两个都用 1 到 5 这样的小刻度打分。分数越高越先处理。

示例

破坏的是哪一点?

动手试试

每个事件都破坏了三点中的一点。用一个字典把事件和它破坏的目标对应起来。

incidents = {
    "Someone reads the customer list": "confidentiality",
    "A price is changed from 100 to 1": "integrity",
    "The website is down for 3 hours": "availability",
}
for event, goal in incidents.items():
    print(goal.upper(), "-", event)
逐步执行
  1. L1字典:事件 → 它破坏的目标。
  2. L6.items() 每次给出一个键和它的值。
  3. L7.upper() 把目标变成大写,更显眼。CONFIDENTIALITY - Someone reads the customer list

给风险打分并排序

动手试试

可能性和影响都从 1(低)到 5(高)。sorted 加上 key=,就按这个函数的返回值来排序。

risks = [
    ("Weak admin password", 4, 5),
    ("Stolen laptop", 2, 4),
    ("Server disk full", 3, 2),
]

def score(risk):
    name, likelihood, impact = risk
    return likelihood * impact

for risk in risks:
    print(risk[0], score(risk))
ranked = sorted(risks, key=score, reverse=True)
print("Fix first:", ranked[0][0])
逐步执行
  1. L1每个风险是一个元组:(名称,可能性,影响)。
  2. L8把元组拆成三个变量,再相乘。
  3. L124 × 5 = 20,2 × 4 = 8,3 × 2 = 6。Weak admin password 20
  4. L13reverse=True 让分数最高的排在最前面。
  5. L14弱密码分数最高:先修它。Fix first: Weak admin password

常见错误

以为安全就是保密

保密只是三个目标之一。网站被打挂了(可用性),或者价格被攻击者改掉了(完整性),同样是安全事故。

未经授权就去测试

在不属于你的系统上尝试攻击,在大多数国家都违法,哪怕只是「试试看」。请在自己的机器、实验环境和这些课程里练习。

小测验

1. 勒索软件把医院的文件加密了,医生打不开病历。最先被破坏的是哪一点?

  1. A机密性
  2. B完整性
  3. C可用性
查看答案

答案:C

数据还在,也可能没被人看过,但需要它的人用不了:这是可用性。

2. 这段代码会输出什么?

likelihood = 3
impact = 4
score = likelihood * impact
if score >= 15:
    print("high")
elif score >= 8:
    print("medium")
else:
    print("low")
  1. A
    high
  2. B
    medium
  3. C
    low
查看答案

答案:B

3 × 4 = 12:不到 15,但不少于 8,所以是 medium。

动手练习

3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。

  1. 预测输出最大的风险

    准确写出这段程序的输出。

  2. 改需求只看严重的

    程序会打印每个风险和分数。修改它,让它只打印分数不低于 10 的风险,格式如下:

    HIGH: Weak admin password (20)
  3. 从零写风险等级

    写一个函数 risk_level(likelihood, impact),返回:

    • 可能性 × 影响不少于 15 时返回 "high"
    • 不少于 8 时返回 "medium"
    • 其他情况返回 "low"

在互动课里练这一课

打开互动课,这些例子都能直接改、直接运行,练习题提交马上判题。免费开始,不用注册。

本课术语

术语中文英文定义
Confidentiality机密性Only the right people can read the data.
Integrity完整性Data can't be changed without the change being noticed.
Availability可用性The system and data are reachable when they are needed.
Threat威胁Anything that could break confidentiality, integrity or availability.
Risk风险How much a threat matters, often scored as likelihood times impact.