基于哈佛cs50的计算机通识笔记
计算机安全常识
账户安全
美国国家标准与技术研究院 (NIST)的建议:
- 密码长度应至少为八个字符
- 验证者应规定所有打印的 ASCII 字符和 Unicode 符号的长度最多为 64 个字符
- 验证者应该将预期的密码与可用的字典单词、重复序列、被破坏的密码列表和上下文特定的单词进行比较
- 验证者不应允许未经身份验证的用户访问密码提示
- 验证者不应要求定期更改密码
- 验证者应限制失败的身份验证尝试次数并锁定潜在的攻击者
多重身份验证(2fa)由三个组成部分组成。
- 知识:只有你知道的东西
- 所有物:仅由授权用户拥有的物品或设备
- 固有物:仅是您可以获得的一个因素,例如您的指纹、面部或其他生物识别信息
一次性密码OTP:
- 人们可以获得一种特殊的密钥卡或提供一次性密码的设备
- OTP 通常是从设备或应用程序获取的
- 基于短信的 OTP 很容易通过 SIM 交换而被欺骗,攻击者会获取并克隆 SIM 卡并访问您的短信,因此验证器类型的验证应用程序更安全(比如需要指纹验证的)
键盘记录:
- 用户名、密码和 OTP 很容易被攻击者记录您的击键
- 键盘记录是通过在计算机上安装恶意软件来完成的
- 最好确保您仅登录您只能访问的设备
社会工程/钓鱼:
- 懂得都懂,点击url时需要谨慎再谨慎,收到任何可能泄露信息的请求时核对对方身份
单点登录SSO:
- SSO 允许您使用 Google 或 Facebook 登录来访问 Google 或 Facebook 未提供的服务
- 因此,您能够以更少的摩擦和更高的安全性轻松访问其他服务
密码管理器:
- 把鸡蛋放在一个篮子里,但是相对能提高安全性
- 推荐keepass
数据安全
哈希:将一些纯文本转换为可读性较差的散列值输出的方法,常存储密码的哈希值从而降低风险
- 字典攻击 仍然可以将字典中的一个又一个值输入到哈希函数中,作为破解它的一种方式。
- 彩虹表 是另一种威胁,对手拥有哈希表中所有潜在哈希值的表。然而,这需要数 TB(甚至 PB)的存储容量才能完成
- 单向哈希函数 用代码编写,接收任意长度的字符串并输出固定长度的哈希值。
- 利用这样的功能,哈希值和哈希函数的持有者将永远不会知道原始密码。
盐:加盐 是将附加值“撒”到哈希函数中,从而使哈希值发生变化的过程,几乎可以保证用户提供的哈希值(即使是具有相同密码的用户)也会收到不同的哈希密码
非对称加密:你需要一个公钥一个私钥,例如公钥是两个素数的乘积,私钥是其中一个因数,私钥被收发双方共用
- 发送者使用公钥和明文并将其输入算法中。这会产生密文
- 接收者将私钥和密文输入到算法中。这会产生破译的文本
- 消息(文档的内容)被传递给哈希函数,从而产生哈希值,私钥和哈希值被传递给数字签名算法,从而产生数字签名;接收者将公钥和提供给解密算法的签名传递给解密算法,从而产生应与先前计算的哈希值相匹配的哈希值,验证签名
硬盘加密:
- 操作系统删除文件时,事实上只释放了空间,原有文件内容有可能留存一段时间,因此需要 安全删除 ,将已删除文件的所有剩余部分更改为零、一或零和一的随机序列
- 全盘加密 或 静态加密 可完全加密硬盘驱动器的内容。
- 如果您的设备被盗或您出售了设备,任何人都将无法访问您的加密数据。
- 然而,它的缺点是,如果您丢失密码或脸部发生足够大的变化,您将无法访问您的数据。
- 另一个缺点是黑客可能通过 勒索软件 使用相同类型的技术来加密您的硬盘并将其劫为人质
- 例如veracrypt之类的软件可以实现硬盘级或者文件级(将一个文件虚拟成硬盘分区)的加密,微软的bitlock配合部分硬件功能甚至可以实现硬件级加密(范围是卷)
量子计算:新兴的计算机技术,可能彻底颠覆目前的计算机密码学
系统安全
- 超文本传输协议 ( HTTP )是一种未加密的数据传输方式。
- 使用 HTTP,人们很容易受到 中间人 攻击,攻击者可能会在下载的内容中注入额外的 HTML 代码。广告可以被注入到您通过 HTTP 访问的所有网页中。此外,还可以插入恶意代码。
- 事实上,还存在其他威胁。 数据包嗅探 是攻击者查看双方之间传输的数据内部的一种方式。可以想象,放置在不安全数据包中的信用卡号会被攻击者检测到并窃取。
- Cookie 是网站放置在您计算机上的小文件。网站可能会使用 Cookie 来跟踪您的身份、显示您的电子邮件或跟踪您的购物车。 Cookie 使人容易受到 会话劫持 ,对手可以通过注入 超级 cookie 来跟踪您。
- HTTPS 是 HTTP 的安全协议。传输中加密流量(使用上一章提及的公钥加密技术)
- CA 是颁发证书的受信任的第三方公司
- 当访问网站时,浏览器会下载该网站的证书,并创建哈希值。
- 然后,它使用网站的公钥和提供给算法的证书签名来验证哈希值是否符合
- 如果哈希匹配,则网络浏览器应用程序确信这是一个安全网站
- SSL Stripping 是一种攻击者在网站上使用 HTTP 将流量重定向到恶意网站的攻击。攻击者甚至可能将其重定向到非预期网站的 HTTPS 安全域。
- 减轻这种威胁的一种方法是实施 HSTS 或 HTTP 严格传输安全 ,服务器告诉浏览器将所有流量引导到安全连接
- 攻击者可能会对服务器进行 端口扫描 ,尝试所有潜在端口以查看它们是否正在接受流量
- 防火墙是一种软件,通过阻止未经授权的访问(包括设备上受损的服务)来保护各种服务
- 防火墙利用 IP 地址 (分配给网络上每台计算机的唯一编号)来防止外部人员攻击
- 防火墙还可以使用 深度数据包检查 ,检查数据包中的数据以查找您的公司可能感兴趣的材料。这可以用来检查您是否正在向媒体或可能被您公司视为对手的其他方发送电子邮件。
- 使用 深度数据包检测通过代理 ,其中中间的设备用作流量传入和传出网络的路径。您的学校或公司可能会在此代理上更改 URL、记录您尝试浏览的 URL,并希望保护您免受潜在有害行为的影响。
- 蠕虫病毒 是一种恶意软件,可以通过安全漏洞从一台计算机转移到另一台计算机。
- 僵尸网络 是一种恶意软件,一旦安装在您的计算机上,就会感染其他计算机,并且攻击者可以利用它向数千台受感染的计算机发出命令。
- 受僵尸网络感染的计算机可用于发出 拒绝服务攻击dos ,从而可以向服务器发出大量请求,以减慢或关闭服务器。由于僵尸网络中有如此多的计算机,因此这种类型的攻击可以称为 分布式拒绝服务攻击ddos
- 零日攻击 ,这种攻击会在杀毒软件公司有机会创建修复程序之前利用软件中的未知漏洞
软件安全
- 攻击者可能会利用您不注意的情况,声称您正在链接到一个网页,而实际上您正在链接到另一个网页,如
<a href="https://yale.edu">https://harvard.edu</a>
- 攻击者经常创建虚假版本的网站,其唯一目的是诱骗用户在这些网站中输入敏感信息。例如,如果您是一名哈佛学生,访问此类假哈佛网站,您可能会尝试登录并向对手提供您的用户名和密码
- 跨站点脚本攻击 ( XSS )是一种攻击形式,攻击者将代码附加到合法网站上,通过用户的输入诱骗网站运行恶意代码。当受害者加载网站时,代码就会执行。
- 反射攻击 一种利用网站接受输入的方式来欺骗用户浏览器发送导致攻击的信息请求的攻击,如伪造了请求数据包的源 IP,接受请求的主机被诱骗将其UDP响应数据包发送到目标受害者 IP,而不是发送回攻击者的 IP 地址
- 存储攻击 网站可能容易受到攻击,被诱骗存储恶意代码。
- 字符逃脱 一些特殊字符如
<>
可用于注入恶意代码,对于特殊字符安全软件应该进行转义 - 常见的转义字符包括:
<
,“<”>
,“>”&
,“&”"
,“'
,'
- 可通过html标头仅允许通过单独的文件加载js或css,避免被注入标签执行恶意代码
- SQL注入 利用sql语法注入代码并执行语句,类似字符逃脱,永远不要相信用户的输入,需要转义整个用户输入信息
- 现代常用的防止sql注入方法:预制sql模板,部分信息接收用户输入前必须转义输入
- 命令 注入 攻击是一种对底层系统本身发出命令的攻击。
- 如果命令从用户输入传递到命令行,效果可能是灾难性的。需要阅读编程语言系统接口的文档了解如何转义
- 不要相信html部分的验证,通过开发者工具可以随时更改,验证应该在服务端进行
- 跨站点请求伪造 / CSRF 诱骗用户在另一个网站上执行命令,如伪造一个亚马逊网站,用户点击网站购买的请求被攻击者转发给亚马逊,在此过程中攻击者可以得到受害人和亚马逊之间的所有收发数据
- 防止此类攻击的一种方法是使用 CSRF 令牌 ,其中服务器为每个用户生成一个凭证令牌,令牌无法验证通过的请求是非法的
- 令牌通常通过 HTML 标头提交。
- 任意代码执行 ( ACE )是执行不属于软件内预期代码的代码的行为。有时,此类攻击可用于 破解 或绕过注册或支付软件费用的需要或者逆向工程
- 应用程序商店采用加密技术,仅接受由授权开发人员签名的软件或代码。作为回应,应用程序商店使用数字签名对软件进行签名。因此,操作系统可以确保只安装经过授权、签名的软件。
- 包管理器 采用类似的签名机制来确保您从第三方下载的内容是值得信赖的。但是,上游开源软件仍是有可能注入恶意代码的
- common vulnerabilities and exposures or CVE 是全球开发者可以查看的漏洞表,使其进行安全维护并确认安全优先级
隐私安全
- 浏览历史记录既是一种功能,也是对隐私的潜在威胁
- 服务器通常具有 用户活动日志 。因此,即使您清除浏览器历史记录,服务器也会跟踪您访问过的内容
- 当你通过href标签访问链接时,浏览器默认向跳转网站提供将您引向该网站的链接,也就是跳转到的网站的来源信息,包括您之前进行的搜索即搜索内容等来源
- 可以将以下元标记添加到您的网站,以限制仅发送来源域名或不提供来源信息。更多相关元标记可自行谷歌
1 | <meta name="referrer" content="origin"> |
- 每个浏览器都会提供有关您的身份和行为的信息,无论您选择哪种浏览器,服务器都会记录您的活动。
- 指纹识别 是第三方可以根据可用线索识别您身份的一种方式,即使您已限制浏览器共享尽可能少的有关您的信息。
- 您的 IP 地址,屏幕分辨率、安装的扩展、安装的字体,常用语言,可以被逐渐收集,让您越来越容易被识别
- Session cookie 是服务器放置在您的计算机上用于识别您身份的信息,每个会话编号对于每个用户来说都是唯一的,通常有过期时间
- 第三方使用追踪 cookie 来跟踪您在网站上的行为,例如设定将这个cookie信息发给每个你访问的网站
- url中可以设置特殊参数来追踪用户, 如
https://example.com/ad_engagement?click_id=YmVhODI1MmZmNGU4&campaign_id=23
中click_id
用户追踪用户, 因此浏览器越来越倾向于清理跟踪参数 - 第三方(即其他服务器或公司)想要了解您如何在网站之间移动,例如在a网站的第三方广告设置一个cookie,b网站也有这个广告,发现你的cookie,说明访问ab网站的事同一个用户
- 保护您的活动的一种方法是 私密浏览 。
- 在私人浏览窗口或选项卡中,过去的 cookie 将被删除。但新的cookie依旧可以生效
- 无论谁为您提供互联网服务,都可以在您不知情的情况下将他们自己的 cookie 注入到您的 HTTP 标头中
- 域名系统 DNS 是 一种服务将域名转化为特定ip地址,按照惯例,到 DNS 的流量完全未加密。因此,您正在向全世界宣布您正在尝试访问哪个网站,您的互联网服务提供商和 DNS 服务确切地知道您尝试访问的位置
- DNS over HTTPS 或 DoH 以及 DNS over TLS 或 DoT 是您可以加密 DNS 请求的服务
- Tor 是一款将您的流量重定向到 Tor 服务器节点的软件。流量通过许多加密节点进行引导。根据设计,该软件不会记住您的大部分活动。使用此类服务很可能无法识别您的身份。
- 但请注意,如果您是工作地点或学校本地网络上唯一使用 Tor 的人,则很可能通过其他方式识别您的身份。
- 基于位置的服务 提供您的地理位置。最好记住,如果您向 Apple 地图和 Google 地图提供此类权限,它们就非常清楚您在任何给定时间所在的位置
- 没有任何技术可以为您提供绝对的保护。
20 シー ジー チエン シイ, バー リー ゥルオン チュウ ユイ コーァ ジー ゴーァ ミーン シー チイ, ジーン ジー ウエン ホワ シュイン スゥ ファー ジャン, ヨーン ジー ドーァ(ディー) ピン ミン クゥ, ジー ズゥイ ジン ミー ドーァ(ディー) シャーン ツオン ショーァ ホゥイ(クワイ), ゴーン チャーン リー ホゥイ サー ハン シュウイ ドーァ(ディー) ゴーン ゥレン イー トーン ゴウ チュヨン ローァ(リヤオ) ジン シエン ダイ オウ ジョウ ズゥイ ファン ホワ ドーァ(ディー) チュヨン シー ジー イー ツー シー ドーァ(ディー) バー リー シー ミン ジョーン リウ シーン(ハーン) ジョーァ(ジャオ,ジュオ) イー ジョーン ジエン ドワン ドーァ(ディー) ファン ズゥイ グゥ シー シン ウエン, バオ クオ リエン ホワン シャア ゥレン アン ドゥオン ハイ ゥレン ティーン ウエン ドーァ(ディー) オーァ シーン ファン ズゥイ シー ジエン, ホオ シュイ コーァ イー シー ウエイ ザオ チイ ドーァ(ディー) ドウ(ドゥ) シー チュワン(ジュワン) シュオ(シュウイ),1897 ニエン, イー ゴーァ シヤオ シイ リーン トーン チエ トウ(トウ) ナオ ミン ゥルイ ドーァ(ディー) シヤオ バオ ジー ジョーァ ブゥ ジュオ ダオ ローァ(リヤオ) シー ミン メン ドゥイ ジエ トウ(トウ) ファン ズゥイ ホーァ ディー ツオン ゥレン シュヨン ホオ ドーァ(ディー) シーン チュイ, ユイ シー ター マイ シア ローァ(リヤオ) イー ブゥ フェイ チイ ジアオ ターン, ガイ ザオ チュヨン ジュイ ユエン, ミーン ミーン ウエイgrand-guigno, グゥ ラン. ジー ニエ オーァ(アル)