网站安全学习笔记

......

Posted by 呆贝斯 on June 7, 2020

什么是网站安全?

互联网是一个危险的地方!我们经常听到有关网站因拒绝服务攻击或在其主页上显示修改(通常是有害的)信息而变得不可用的消息。 在一些出名的案例中,上百万的密码、邮件地址和信用卡信息被泄露给了公众,导致网站用户面临个人尴尬和财务威胁。

网站安全的目的是防止这些(或者说所有)类型的攻击。更正式点说,站点安全就是为保护站点不受未授权的访问、使用、修改和破坏而采取的行为或实践。

有效的站点安全需要在对整个站点进行设计:包括 Web 应用编写、Web 服务器的配置、密码创建和更新的策略以及客户端代码编写等过程。 尽管这听起来很凶险,好消息是如果你使用的是服务器端的 Web 服务框架,那么多数情况下它默认已经启用了健壮而深思熟虑的措施来防范一些较常见的攻击。 其它的攻击手段可以通过站点的Web服务器配置来减轻威胁,例如启用HTTPS。 最后,可以用一些公开可用的漏洞扫描工具来协助发现你是否犯了一些明显的错误。

网站安全威胁

服务器攻击

服务器安全是其中一个重要的方面。服务器的安全配置管理以及程序脚本的完善性是网站安全的重点之一。 如果服务器的账号和权限由于管理不善而泄露了,即使技术上网站系统再安全,也不可避免会受到攻击。

点击劫持

在这种攻击中,恶意用户劫持了针对可见顶级站点的点击,并将它们路由到下方的隐藏页面。 例如,此技术可能用于显示合法的银行站点,但会将登录凭据捕获到 iframe 攻击者控制的不可见站点中。 点击劫持也可以用来让用户点击一个可见站点上的按钮,但这样做实际上是在不知不觉中点击了一个完全不同的按钮。 作为防御,您的站点可以通过设置适当的 HTTP 标头来防止自己嵌入到另一个站点的 iframe 中。

拒绝服务

DoS 通常是通过向目标站点充斥虚假请求来实现的,从而中断合法用户对站点的访问。 请求可能很多,或者它们可能单独消耗大量资源(例如,缓慢读取或上传大文件)。 DoS 防御通常通过识别和阻止“不良”流量同时允许合法消息通过来发挥作用。 这些防御通常位于 Web 服务器之前或内部(它们不是 Web 应用程序本身的一部分)。

目录遍历

在此攻击中,恶意用户尝试访问他们不应访问的部分 Web 服务器文件系统。 当用户能够传递包含文件系统导航字符(例如,../../)的文件名时,就会出现此漏洞。解决方案是在使用输入之前对其进行清理。

文件包含

在这种攻击中,用户能够指定一个“非预期”文件以在传递给服务器的数据中显示或执行。 加载后,此文件可能会在 Web 服务器或客户端执行(导致 XSS 攻击)。解决方案是在使用输入之前对其进行清理。

命令注入

命令注入攻击允许恶意用户在主机操作系统上执行任意系统命令。解决方案是在系统调用中使用用户输入之前对其进行清理。

密码爆破

黑客使用密码字典多次尝试登陆来破解密码。

敏感信息泄露

服务端返回的数据,敏感信息未隐藏。

常见提升网站安全做法

当 Web 应用信任来自浏览器的数据时,上述章节里提到的大多数攻击利用手段才能成功。无论你做什么其它的事情来提升你的网站的安全性能,在将信息展示在浏览器之前、在使用 SQL 语句进行查询之前、在传递给一个操作系统或者文件系统之前,你应该过滤掉所有的用户源信息。

在你可以了解到的有关网站安全大多数课程之中,最重要的就是不要相信来自浏览器的数据。包括在 URL 参数中的 GET 请求、POST 请求、HTTP 头、cookies、用户上传的文件等等。一定要每次都检查用户输入的信息。每次都预想最坏的结果。

你可以采取一些简单的步骤:

  • 架构安全 保证系统各处高可用,单个应用不至于被打破。
  • 系统安全

    1. 安装防火墙,以防止未经授权的访问和攻击。
    2. 禁用不必要的服务和端口,以减少服务器的攻击面,限制对服务器的访问,只允许必要的人员访问服务器。
    3. 监控服务器的活动,以及检测和响应安全事件。
    4. 定期更新操作系统、安全软件。
    5. 将你的服务器配制成 HTTPS 和 HTTP Strict Transport Security (en-US) (HSTS)。HTTPS 会加密你的用户和服务器之间传输的信息。这使得登录认证、cookise、POST 数据及头信息不易被攻击者获得。
  • 密码安全

    1. 拒绝弱口令,采取更加强大的密码管理措施。当密码频繁更换时鼓励更加健壮的密码。
    2. 采取双因素认证,也就是说除了密码,用户还应该输入另一种认证码(通常是只有唯一一个用户拥有的通过一些物理硬件传输的,比如发送给用户手机的验证短信)。
  • 应用安全 定期更新软件,以确保服务器上的所有软件都是最新的。
  • 数据安全
    1. 定期的数据库备份对于网站发生异常后的数据恢复非常有必要,最大程度地保证网站数据不被丢失。
    2. 只存储和展示你不得不需要的东西。如果不得不存储一些敏感信息(如信用卡账号),只展示足以让用户识别卡号的几位数字即可,却不足以让黑客复制之后在另一个站点使用。现今最常见的是只展示信用卡卡号后 4 位数字。
  • 其他
    1. 注意网站程序各方面的安全性测试。使用 vulnerability scanning tools 来对你的网站进行一些安全测试 ,包括防止SQL注入、密码加密、数据备份、使用验证码等方面加强安全保护措施。
    2. 持续追踪那些常见的网络攻击 (the current OWASP list is here),先解决最脆弱的部分。网站还可以靠提供赏金来寻找 bug,就像 Mozilla 这样(like Mozilla does here)。

总结

这篇文章介绍了有关网络安全的概念,你应该避免一些常见的攻击。最重要的是,你应该理解一个网络应用程序, 不能相信任何来自网络服务器的数据!所有的用户数据在展示、使用 SQL或者回应系统之前应该被过滤查询。