很多人可能不认为自己的网站不值得被黑客入侵,但是网站一直都在受到入侵。大多数网站安全漏洞不是窃取您的数据,而是尝试将您的服务器用作垃圾邮件的电子邮件中继。或设置一个临时Web服务器,或者当作一个挂马站,在服务器中所有网站挂上一些链接,通常用于提供非法文件。滥用受感染机器的其他非常常见的方法包括将您的服务器用作僵尸网络的一部分,或挖掘比特币。您甚至可能受到勒索软件的攻击。
黑客通常通过编写自动脚本来执行冲刷任务,以搜寻互联网,以利用软件中已知的网站安全问题。以下是我们帮助您和网站服务器安全的9大技巧。
01.使软件保持最新
看起来似乎很明显,但是确保所有软件都保持最新对确保站点安全至关重要。这适用于服务器操作系统以及您可能在网站上运行的任何软件(例如CMS或论坛)。当在软件中发现网站安全漏洞时,黑客会迅速尝试滥用它们。
如果您使用的是托管托管解决方案,那么您不必担心为操作系统应用安全更新,因为托管公司应该注意这一点。
如果您在网站上使用第三方软件(例如CMS或论坛),则应确保快速应用所有安全补丁程序。大多数供应商都有详细列出任何网站安全问题的邮件列表或RSS feed。WordPress,Umbraco和许多其他CMS在您登录时通知您可用的系统更新。
许多开发人员使用诸如Composer,npm或RubyGems之类的工具来管理其软件依赖性,出现在您所依赖但未引起关注的软件包中的安全漏洞是最容易被发现的方法之一。确保您的依赖关系保持最新状态,并使用Gemnasium之类的工具在某个组件中宣布一个漏洞时自动获得通知。
02.注意SQL注入
SQL注入攻击是指攻击者使用Web表单字段或URL参数来访问或操纵您的数据库时。当您使用标准的Transact SQL时,很容易在不知不觉中将恶意代码插入查询中,这些代码可用于更改表,获取信息和删除数据。您可以通过始终使用参数化查询来轻松地避免这种情况,大多数Web语言都具有此功能,并且易于实现。
考虑以下查询:
"SELECT * FROM table WHERE column = '" + parameter + "';"如果攻击者将URL参数更改为传递'或'1'='1,这将导致查询如下所示:
"SELECT * FROM table WHERE column = '' OR '1'='1';"由于“ 1”等于“ 1”,这将使攻击者可以在SQL语句的末尾添加一个附加查询,该查询也将被执行。
您可以通过显式参数化此查询来解决此查询。例如,如果您在PHP中使用MySQLi,则应为:
$stmt = $pdo->prepare('SELECT * FROM table WHERE column = :value'); $stmt->execute(array('value' => $parameter)); 03.防御XSS攻击跨站点脚本(XSS)攻击将恶意JavaScript注入您的页面,然后在用户的浏览器中运行该JavaScript,并且可以更改页面内容或窃取信息以发送回攻击者。例如,如果您在未经验证的页面上显示评论,则攻击者可能会提交包含脚本标签和JavaScript的评论,这些脚本标签和JavaScript可以在每个其他用户的浏览器中运行并窃取其登录Cookie,从而使攻击者可以控制每个用户的帐户查看评论的用户。您需要确保用户不能将活动的JavaScript内容注入您的页面。
这是现代Web应用程序中特别需要关注的问题,在这些应用程序中,页面现在主要由用户内容构建,并且在许多情况下会生成HTML,然后这些HTML也会由前端框架(如Angular和Ember)进行解释。这些框架提供了许多XSS保护,但是混合服务器和客户端呈现也会创建新的和更复杂的攻击途径:不仅将JavaScript注入HTML有效,而且还可以注入将通过插入Angular指令或使用Ember运行代码的内容。帮手。
这里的关键是着眼于用户生成的内容如何能够逃脱您期望的范围,并被浏览器解释为您想要的其他内容。这类似于防御SQL注入。动态生成HTML时,请使用明确进行所需更改的函数(例如,使用element.setAttribute和element.textContent,它们将被浏览器自动转义,而不是手动设置element.innerHTML),或使用函数在您的模板工具中会自动进行适当的转义,而不是串联字符串或设置原始HTML内容。
XSS防御者工具箱中的另一个强大工具是内容安全策略(CSP)。CSP是服务器可以返回的标头,它告诉浏览器限制页面中JavaScript的执行方式和执行方式,例如,禁止运行未在您的域中托管的任何脚本,禁止内联JavaScript或禁用eval()。Mozilla提供了一些示例配置的出色指南。即使攻击者的脚本可以将其带入您的页面,这也使其工作起来更加困难。
04.当心错误信息
请注意在错误消息中提供的信息量。仅向您的用户提供最少的错误,以确保他们不会泄漏您服务器上存在的机密(例如,API密钥或数据库密码)。也不要提供完整的异常详细信息,因为它们会使复杂的攻击(如SQL注入)变得更加容易。在您的服务器日志中保留详细的错误,并仅向用户显示他们需要的信息。
05.双方验证
验证应始终在浏览器和服务器端进行。浏览器可以捕获简单的故障,例如必填字段为空以及在仅数字字段中输入文本时。但是,可以绕过这些操作,并且您应确保检查这些验证和更深层的验证服务器端,否则可能导致恶意代码或脚本代码插入数据库中或在您的网站中导致不良结果。
06.检查您的密码
每个人都知道他们应该使用复杂的密码,但这并不意味着他们总是这样做。在服务器和网站管理区域中使用强密码至关重要,但同样重要的是,坚持为用户提供良好的密码习惯,以保护其帐户的安全。
尽管用户可能不喜欢,但强制执行密码要求(例如,至少要包含八个字母左右的八个字符),这将有助于长期保护他们的信息。
密码应始终存储为加密值,最好使用单向哈希算法(例如SHA)存储。使用此方法意味着在对用户进行身份验证时,您只能比较加密的值。为了提高网站的安全性,最好对密码加盐(每个密码使用新的盐)。
如果有人侵入并窃取您的密码,则使用散列密码可能会有助于限制损害,因为无法解密它们。某人可以做的最好的事情就是字典攻击或蛮力攻击,实质上是猜测每种组合,直到找到匹配为止。当使用加盐密码时,破解大量密码的过程甚至更慢,因为每个盐和密码的每个猜测都必须分别进行哈希处理,这在计算上非常昂贵。
值得庆幸的是,尽管使用咸密码(Drupal 7之前的版本)或设置最低密码强度可能需要一些配置或额外的模块,但许多CMS还是为用户管理提供了许多内置的内置网站安全功能。如果您使用的是.NET,则值得使用成员资格提供程序,因为它们非常易于配置,提供内置的网站安全性并包括用于登录和密码重置的现成控件。
07.避免文件上传
即使只是更改他们的头像,允许用户将文件上传到您的网站也可能带来很大的网站安全风险。风险是,任何上传的文件,无论看上去多么单纯,都可能包含一个脚本,该脚本在您的服务器上执行时会完全打开您的网站。
如果您有文件上传表单,则需要非常怀疑所有文件。如果允许用户上载图像,则不能依靠文件扩展名或mime类型来验证文件是否为图像,因为这些很容易被伪造。即使打开文件并读取标题,或使用功能检查图像大小也不是万无一失的。大多数图像格式都允许存储一个注释部分,其中可能包含服务器可以执行的PHP代码。
那么,您可以采取什么措施来防止这种情况发生呢?最终,您希望阻止用户执行他们上传的任何文件。默认情况下,Web服务器不会尝试执行带有图像扩展名的文件,但不会仅依赖于检查文件扩展名,因为已知名称为image.jpg.php的文件可以通过。
一些选项是在上传时重命名文件以确保正确的文件扩展名,或更改文件许可权,例如chmod 0666使其无法执行。如果使用* nix,则可以创建一个.htaccess文件(请参见下文),该文件将仅允许访问设置的文件以防止前面提到的双扩展名攻击。
deny from all <Files ~ "^\w+\.(gif|jpe?g|png)$"> order deny,allow allow from all </Files>最终,推荐的解决方案是完全禁止直接访问上传的文件。这样,任何上传到您网站的文件都将存储在webroot之外的文件夹中或数据库中。如果无法直接访问文件,则需要创建一个脚本以从专用文件夹(或.NET中的HTTP处理程序)中获取文件,并将其传递到浏览器。图像标签支持不是图像的直接URL的src属性,因此,如果您在HTTP标头中设置了正确的内容类型,则src属性可以指向文件传递脚本。例如:
<img src="/imageDelivery.php?id=1234" /> <?php // imageDelivery.php // Fetch image filename from database based on $_GET["id"] ... // Deliver image to browser Header('Content-Type: image/gif'); readfile('images/'.$fileName); ?>大多数托管服务提供商会为您处理服务器配置,但是如果您将网站托管在自己的服务器上,那么您将需要检查的内容很少。
确保您具有防火墙设置,并阻止所有非必需端口。如果可能,请设置DMZ(非军事区),仅允许外界访问端口80和443。尽管如果无法从内部网络访问服务器,则可能无法实现,因为您将需要打开端口以允许上传文件并通过SSH或RDP远程登录到服务器。
如果您允许从Internet上传文件,请仅使用安全的传输方法将文件传输到服务器,例如SFTP或SSH。
如果可能,数据库要在与Web服务器不同的服务器上运行。这样做意味着无法直接从外部访问数据库服务器,只有您的Web服务器可以访问它,从而最大程度地减少了暴露数据的风险。
最后,不要忘记限制对服务器的物理访问。
08.使用HTTPS
HTTPS是用于通过Internet提供安全性的协议。HTTPS保证用户正在与他们期望的服务器进行通信,并且其他任何人都不能截取或更改他们在传输中看到的内容。
如果您有用户想要私有的任何内容,强烈建议仅使用HTTPS进行交付。当然,这意味着信用卡和登录页面(以及它们提交的URL),但是通常您的网站也会更多。例如,登录表单通常会设置一个cookie,该cookie与其他所有请求一起发送到登录用户发出的您的站点,并用于对这些请求进行身份验证。窃取此信息的攻击者将能够完美地模仿用户并接管其登录会话。为了克服这种攻击,您几乎总是希望对整个站点使用HTTPS。
这不再像以前那样棘手或昂贵。让我们加密提供完全免费和自动化的证书,您需要启用HTTPS,并且现有的社区工具可用于各种常见平台和框架,以自动为您设置此证书。
值得注意的是,Google已宣布,如果您使用HTTPS,它们将在搜索排名中提升您的位置,这也为SEO带来了好处。不安全的HTTP即将淘汰,现在是升级的时候了。
已经在各处使用HTTPS了吗?进一步讲一下,设置HTTP Strict Transport Security(HSTS),这是一个简单的标头,您可以将其添加到服务器响应中,以禁止整个域使用不安全的HTTP。
09.获取网站安全工具
一旦您认为自己已经做好了一切,就可以测试网站的安全了。最有效的方法是使用某些网站安全工具,通常称为渗透测试或简称为笔测试。
有许多商业和免费产品可以帮助您。他们以与脚本黑客类似的方式工作,他们测试所有已知漏洞,并尝试使用前面提到的某些方法(例如SQL Injection)来危害您的站点。
一些值得关注的免费工具:
Netsparker(提供免费的社区版和试用版)。非常适合测试SQL注入和XSS OpenVAS声称是最先进的开源安全扫描程序。非常适合测试已知漏洞,目前可扫描25,000多个。但是这可能很难设置,并且需要安装仅在* nix上运行的OpenVAS服务器。在成为开源商业产品之前,OpenVAS是Nessus的分支 。 SecurityHeaders.io(免费在线检查)。快速报告域中已启用并正确配置了上述哪些安全标头(例如CSP和HSTS)的工具。 Xenotix XSS Exploit Framework是OWASP(开放式Web应用程序安全项目)中的工具,其中包含大量的XSS攻击示例,您可以运行这些示例来快速确认您站点的输入在Chrome,Firefox和IE中是否容易受到攻击。自动测试的结果可能令人生畏,因为它们会带来很多潜在的问题。重要的是首先关注关键问题。通常,所报告的每个问题都带有对潜在漏洞的良好解释。您可能会发现某些中/低级问题与您的网站无关。
您可以采取其他一些步骤,通过更改POST / GET值来手动尝试破坏您的站点。调试代理可以在这里为您提供帮助,因为它允许您在浏览器和服务器之间拦截HTTP请求的值。一个流行的名为Fiddler的免费软件应用程序是一个很好的起点。
那么,您应该如何尝试更改请求?如果您的页面仅对已登录用户可见,请尝试更改URL参数(例如用户ID或cookie值),以尝试查看其他用户的详细信息。另一个值得测试的领域是表单,可以更改POST值以尝试提交代码以执行XSS或上载服务器端脚本。
版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有