首页 关于我们 项目案例 网站建设 网站优化 微信公众号 技术课堂 联系方式
QQ联系点击这里给我发消息
电话联系
手机联系
QQ联系点击这里给我发消息
电话联系
手机联系
【当前位置】

9个安全提示,以保护您的网站免受黑客攻击?

发布时间:2019-05-26 09:12
发布者:康康
浏览次数:
您可能认为您的网站没有任何值得入侵的内容,但网站一直受到损害。大多数网站安全漏洞不是窃取您的数据或弄乱您的网站布局,而是试图将您的服务器用作垃圾邮件的电子邮件中继,或者设置临时Web服务器,通常用于提供非法性质的文件。滥用受感染机器的其他常见方法包括将您的服务器用作僵尸网络的一部分,或者用于比特币。你甚至可能被勒索软件击中。 
 
 
黑客定期通过编写的自动脚本来搜索互联网,以试图利用软件中已知的网站安全问题。以下是我们帮助您和您的网站保持在线安全的九大提示。
 

01.保持软件最新

这似乎很明显,但确保您保持所有软件的最新状态对于确保您的网站安全至关重要。这适用于服务器操作系统和您在网站上运行的任何软件,例如CMS或论坛。当在软件中发现网站安全漏洞时,黑客很快就会试图滥用它们。
 
如果您使用托管主机解决方案,那么您不必担心为操作系统应用安全更新,因为托管公司应该处理这个问题。
 
如果您在网站(如CMS或论坛)上使用第三方软件,则应确保快速应用任何安全修补程序。大多数供应商都有邮件列表或RSS源,详细说明了任何网站安全问题。当您登录时,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的评论,这些评论可以在其他所有用户的浏览器中运行并窃取其登录cookie,从而允许攻击控制每个帐户的帐户查看评论的用户。您需要确保用户无法将活动的JavaScript内容注入您的页面。
 
这在现代Web应用程序中尤其令人担忧,其中页面现在主要是从用户内容构建的,并且在许多情况下生成HTML,然后由Angular和Ember等前端框架解释。这些框架提供了许多XSS保护,但混合服务器和客户端渲染也创建了新的更复杂的攻击途径:不仅将JavaScript注入到HTML中,而且还可以通过插入Angular指令或使用Ember来注入将运行代码的内容。助手。
 
这里的关键是关注用户生成的内容如何逃脱您期望的界限,并被浏览器解释为您想要的其他内容。这类似于防止SQL注入。在动态生成HTML时,使用明确进行所需更改的函数(例如,使用元素.setAttribute和element.textContent,它将由浏览器自动转义,而不是手动设置element.innerHTML),或者使用函数在您的模板工具中自动执行适当的转义,而不是连接字符串或设置原始HTML内容。
 
XSS防御者工具箱中另一个强大的工具是内容安全策略(CSP)。CSP是您的服务器可以返回的标头,它告诉浏览器限制在页面中执行JavaScript的方式和内容,例如禁止运行未在您的域上托管的任何脚本,禁止内联JavaScript或禁用eval()。Mozilla有一些很好的指南,有一些示例配置。这使攻击者的脚本更难以工作,即使他们可以将它们放入您的页面。
 

04.小心错误信息

请注意您在错误消息中提供的信息量。仅向用户提供最小的错误,以确保它们不会泄露服务器上存在的机密(例如API密钥或数据库密码)。不要提供完整的异常细节,因为这些可以使SQL注入等复杂攻击变得更加容易。在服务器日志中保留详细错误,并仅向用户显示所需信息。
 

05.双方确认

应始终在浏览器和服务器端进行验证。浏览器可以捕获简单的故障,例如空的必填字段以及在仅数字字段中输入文本时。但是可以绕过这些,并且您应该确保检查这些验证和更深层次的验证服务器端,因为如果不这样做可能会导致恶意代码或脚本代码插入数据库或者可能导致您的网站出现不良结果。
 

06.检查你的密码

 
每个人都知道他们应该使用复杂的密码,但这并不意味着他们总是这样做。在您的服务器和网站管理区域使用强密码至关重要,但同样重要的是要坚持为用户提供良好的密码操作,以保护其帐户的安全。
 
尽管用户可能不喜欢它,但强制执行密码要求(例如至少大约八个字符,包括大写字母和数字)将有助于长期保护其信息。
 
密码应始终存储为加密值,最好使用单向散列算法(如SHA)。使用此方法意味着在对用户进行身份验证时,您只需比较加密值。对于额外的网站安全性,最好使用每个密码的新盐来加密密码。
 
如果有人入侵并窃取您的密码,使用散列密码可能有助于破坏限制,因为无法对其进行解密。有人能做的最好的是字典攻击或暴力攻击,基本上猜测每个组合,直到找到匹配。当使用盐渍密码时,破解大量密码的过程甚至更慢,因为每个猜测必须针对每个盐+密码分别进行散列,这在计算上非常昂贵。
 
值得庆幸的是,许多CMS提供了开箱即用的用户管理,内置了许多这些网站安全功能,尽管可能需要一些配置或额外模块来使用加密密码(Drupal 7之前)或设置最小密码强度。如果您使用的是.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之外的文件夹中或作为blob存储在数据库中。如果您的文件无法直接访问,则需要创建一个脚本来从私有文件夹(或.NET中的HTTP处理程序)获取文件并将它们提供给浏览器。图像标记支持src属性,该属性不是图像的直接URL,因此您的src属性可以指向文件传递脚本,从而允许您在HTTP标头中设置正确的内容类型。例如:
 
<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来提供它。这当然意味着信用卡和登录页面(以及他们提交的网址),但通常也是您网站的更多内容。登录表单通常会设置一个cookie,例如,它与登录用户发送的每个其他请求一起发送给您的站点,并用于验证这些请求。窃取此攻击者的人将能够完美地模仿用户并接管他们的登录会话。为了抵御这种攻击,您几乎总是希望在整个站点中使用HTTPS。
 
这不再像过去那样棘手或昂贵。让我们的加密提供完全免费和自动化的证书,您需要启用HTTPS,并且现有的社区工具可用于各种常见平台和框架,以便自动为您设置。
 
值得注意的是谷歌已经宣布,如果你使用HTTPS,他们会在搜索排名中提升你,这也是一个搜索引擎优化的好处。不安全的HTTP正在逐渐消失,现在是升级的时候了。
 
已经到处使用HTTPS了吗?进一步了解如何设置HTTP严格传输安全性(HSTS),这是一个简单的标头,您可以添加到服务器响应中以禁止整个域的不安全HTTP。
 

09.获取网站安全工具

一旦您认为自己完成了所有工作,那么就该测试您的网站安全性了。最有效的方法是使用一些网站安全工具,通常称为渗透测试或笔测试。
 
有许多商业和免费产品可以帮助您。他们在脚本黑客的基础上工作,他们测试所有已知的漏洞,并尝试使用前面提到的一些方法(如SQL注入)来破坏您的站点。
 
一些值得关注的免费工具:
 
Netsparker(免费社区版和试用版)。适合测试SQL注入和XSS
OpenVAS声称是最先进的开源安全扫描程序。适用于测试已知漏洞,目前扫描超过25,000个。但是设置起来可能很困难并且需要安装仅在* nix上运行的OpenVAS服务器。在成为闭源商业产品之前,OpenVAS是Nessus的分支 。
SecurityHeaders.io(免费在线检查)。一种工具,用于快速报告域中已提及并正确配置的上述安全标头(例如CSP和HSTS)。
Xenotix XSS漏洞利用框架来自OWASP(开放式Web应用程序安全项目)的工具,其中包含大量XSS攻击示例,您可以运行这些示例以快速确认您的站点的输入在Chrome,Firefox和IE中是否容易受到攻击。
 
自动化测试的结果可能令人生畏,因为它们存在大量潜在问题。重要的是首先关注关键问题。报告的每个问题通常都会对潜在的漏洞做出很好的解释。您可能会发现某些中/低问题不是您网站的问题。
 
您可以采取一些进一步的步骤来手动尝试通过更改POST / GET值来破坏您的网站。调试代理可以在这里为您提供帮助,因为它允许您拦截浏览器和服务器之间的HTTP请求的值。一个名为Fiddler的流行免费软件应用程序是一个很好的起点。
 
那么你应该如何改变请求呢?如果您的页面只对登录用户可见,请尝试更改URL参数(如用户ID或cookie值),以尝试查看其他用户的详细信息。值得测试的另一个领域是表单,更改POST值以尝试提交代码以执行XSS或上载服务器端脚本。