保护您网站的 11 个安全提示
您可能认为您的网站没有什么值得被黑客攻击的地方,但网站随时都可能遭受攻击。大多数网站安全漏洞并非为了窃取您的数据或骚扰您,而是试图将您的服务器用作垃圾邮件的中继站,或设置临时网络服务器,提供非法文件,或进行比特币挖矿。您甚至可能遭受勒索软件的攻击。
坏人到处都是,制造危害,此时我们也应该采取保护措施,确保安全。今天,我将根据我的经验告诉您一些安全提示。如果您发现这有帮助,请考虑点赞。这会激励我创造更多。所以,无论如何,让我们深入研究它。
01.保持软件更新:
这似乎是显而易见的,但确保所有软件保持最新状态至关重要。这适用于服务器操作系统以及您可能在网站上运行的任何软件,例如CMS或论坛。当网站软件中发现安全漏洞时,人们很快就会尝试利用它们。这同样适用于依赖项。
02.进行渗透测试:
进行渗透测试在安全方面起着另一个重要作用。有很多开源工具可以帮助您。如果您正在运行 Linux,我之前写过一篇关于如何在基于 Ubuntu 的发行版上获取 Kali 工具的博客,您可以按照该博客获取这些工具。有一种叫做RapidScan的东西。您可以使用它来扫描您的网站以查找漏洞。
03.清理/验证用户输入:
当将您的输入与服务器同步时,在发送原始数据之前,请清理或验证用户输入。让我给您举个例子,假设您输入文本,然后将其作为评论添加到该页面。如果基本上没有验证/确认,那么用户可以发布原始的 html 片段,因此请对其进行清理,删除不必要的内容。
04.警惕SQL注入:
SQL 注入攻击是指攻击者利用 Web 表单字段或 URL 参数通过 SQL 语句访问或操控数据库。使用标准 Transact SQL 时,很容易在不知不觉中将恶意代码插入查询中,这些代码可能被用来更改表、获取信息和删除数据。您可以通过始终使用参数化查询来轻松防止这种情况,大多数 Web 语言都具有此功能,并且易于实现。
考虑这个查询:
"SELECT * FROM table WHERE column = '" + parameter + "';"
如果攻击者将 URL 参数更改为传入 ' or '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));
05. 注意错误消息和控制台日志:
记录所有必要的信息和错误对于开发来说非常有用,但请确保它们不会发布到生产环境中!只向用户提供最少的错误信息,以确保他们不会泄露服务器上的机密信息(例如 API 密钥或数据库密码)。也不要提供完整的异常详细信息,因为这些信息会使 SQL 注入等复杂攻击变得更加容易。在服务器日志中保留详细的错误信息,并仅向用户显示他们需要的信息。
06. 防范XSS:
XSS 通常称为跨站点脚本。这种攻击会将恶意 JavaScript 注入您的页面,然后该页面在用户的浏览器中运行,并可以更改页面内容或窃取信息发送回攻击者。您需要确保用户无法将活动的 JavaScript 内容注入您的页面。顺便说一下,这里的情况有点类似于 SQL 注入。这里的关键是关注用户生成的内容如何超出您期望的范围并被浏览器解释为您想要的内容。这类似于防御 SQL 注入。动态生成 HTML 时,使用明确进行所需更改的函数(例如,使用 element.setAttribute 和 element.textContent,它们将由浏览器自动转义,而不是手动设置 element.innerHTML),或者使用模板工具中自动执行适当转义的函数,而不是连接字符串或设置原始 HTML 内容。
07. 在两个站点上验证:
客户端和服务器端都应始终进行验证。浏览器可以捕获简单的错误,例如必填字段为空以及在纯数字字段中输入文本。然而,这些错误可以被绕过,因此您应该确保检查这些验证以及服务器端的更深入的验证,因为如果不这样做,可能会导致恶意代码或脚本代码被插入数据库,或者导致您的网站出现不良后果。
08.使用HTTPS:
HTTPS 是一种用于保障互联网安全的协议。HTTPS 确保用户正在与他们预期的服务器通信,并且其他任何人都无法拦截或更改他们在传输过程中看到的内容。
如果您有任何用户可能希望保密的信息,强烈建议仅使用 HTTPS 传输。这当然意味着信用卡和登录页面(以及用户提交的 URL),但通常情况下,您网站的更多内容也需要使用 HTTPS。例如,登录表单通常会设置一个 Cookie,它会随登录用户向网站发出的所有其他请求一起发送,并用于验证这些请求。窃取 Cookie 的攻击者可以完美地模仿用户并接管他们的登录会话。为了抵御此类攻击,您几乎总是希望整个网站都使用 HTTPS。
09.哈希密码:
假设不幸被黑客获取了数据库和密码,现在怎么办?
如果密码经过加盐哈希处理,那就没问题了,否则:见鬼!
哈希处理是将密码加密成单向字符串,这样就没有人能破解它了,而且由于相同的值会返回相同的字符串,因此可以验证输入。加盐是哈希处理的额外安全层。假设你在值的开头或结尾添加“!#$”,然后再进行哈希处理,这样就更安全了。
11. 通过您的网站接受文件上传时请采取预防措施:
当任何人都可以选择将某些内容上传到您的网站时,他们可能会滥用权限,加载恶意文件,覆盖对您的网站很重要的现有文件之一,或者上传过大的文件,导致整个网站瘫痪。
如果可能的话,干脆不要通过你的网站接受任何文件上传。许多小型企业网站完全不提供文件上传选项也能正常运作。如果你的情况也是如此,那么你可以跳过这一步的其他所有内容。
但并非所有网站都适合取消文件上传。某些类型的企业,例如会计师事务所或医疗保健机构,需要为客户提供安全提供文件的方式。
如果需要上传文件,请采取以下预防措施:
-创建允许文件列表
-扫描文件中的恶意软件
-将上传文件夹保留在 webroot 之外
-使用文件类型验证
-上传后重命名文件
10.锁定目录和文件权限:
在 Linux 上,权限可以看作是三位数字代码,其中每位数字都是 0-7 之间的整数。第一位数字代表文件所有者的权限,第二位数字代表文件所属组的任何人的权限,第三位数字代表其他所有人的权限。权限分配如下:
-4 等于读取
-2 等于写入
-1 等于执行
-0 等于该用户无权限
因此,权限为“777”(或 4+2+1 / 4+2+1 / 4+2+1)的文件,用户、组以及世界上的所有人都可以读取、写入和执行。
正如您所料,如果一个文件的权限代码允许网络上的任何人写入和执行,那么它的安全性远低于一个锁定文件以将所有权限仅保留给所有者的文件。当然,向其他用户组开放访问权限是有充分理由的(例如,匿名 FTP 上传),但必须仔细考虑这些情况,以免造成网站安全风险。
因此,一个好的经验法则是按如下方式设置您的权限:
-文件夹和目录 = 755
-单个文件 = 644
今天就写到这里吧,本来想写更多,但手指疼,而且今天又累,就休息一下……
谢谢你的阅读,如果能点个赞就更好了!
请我喝杯咖啡吧。