我的网站有多安全?

时间:2010-04-25 19:26:11

标签: php mysql security web

作为一名初级Web开发人员,我会尽力通过检查来清理所有用户输入。然而,今天,我发现我的网站被黑了(我会根据要求分享他们的网站),这真的让我很奇怪他们是怎么做到的。我正在将我的网站重新组合在一起。我应该怎么做才能防止这些事情发生?是否有人应该与我交谈并询问我的网站有多安全?我该怎么做才能保证我的网站安全?我用PHP和MySQL编写了我的网站。

更新 终于恢复了备份。我在我的脚本中使用$_GET["name"],我猜他们是如何进入我的网站的。首先,他们能够在EACH和我服务器上的每个文件夹中放入一个index.html / index.php文件。谁知道我怎么能反驳这个?

更新:实际上,我的网站并没有被黑客攻击,而是主机。 SSH密码被破解,并在每个文件夹中安装了一个新的索引文件。

7 个答案:

答案 0 :(得分:12)

这是一个非常广泛的问题,所以你得到的答案同样广泛。

为了测试您的网站的安全性,您可以penetration testing。有些公司会为你做这件事。您还可以查看Google Skipfish

您可以做些什么来保证您的网站安全?你可以:

  • 清理并验证所有输入 - 也包括Cookie,它们可能会像客户端发送的其他内容一样被篡改。
  • 使用最新的安全补丁保持操作系统和框架的最新状态。如果您使用CMS,请务必同时使用它。
  • 永远不要发回用户提交的文本,除非您先对其进行html编码。
  • 使用参数化SQL查询来阻止SQL注入攻击。
  • 一般情况下,代码防御性

答案 1 :(得分:4)

要检查的两件大事是 SQL注入远程执行代码

当您从某些不受信任的来源(即整个恐怖世界!)获取输入并将其用作SQL查询时,会发生

SQL注入。修复方法是停止使用字符串替换来构建查询和更新,并严格遵守参数化查询/更新。请注意,使用魔术引用是处理此问题的一种非常低劣的方法,因为它更容易弄错; “始终参数化每个查询”是一种更容易审核的简单方法。 (是的,你需要在这里真正审核你的所有代码。抱歉。)

远程代码执行是指您有任何机制允许网站的客户端要求网站运行未预先加载到网站的网站上的网络服务器可以写信给。它是方便的,是的,但它非常危险,因为一个狡猾的破解者可以要求网络服务器下载rootkit或其他恶意内容。我们过去常常使用我们的主Web服务器,因此我们现在在一个严格的只读文件系统(带远程日志记录)上运行它,远程执行PHP代码(或者,实际上,打开任何其他连接到非 - 白名单的服务器)严格禁止。对于不断被聘用的各种外部网页设计咨询公司来说,这是非常令人沮丧的,但这是因为他们在运行安全系统的整个业务中往往不是很专业,而且这确实意味着这一类攻击都被锁定了

(需要注意的另一件事是 XSS ,虽然它不是完全对您网站的攻击。当您未能引用不受信任的内容时,会发生这种情况。您的数据库正确,允许从您的网站提供恶意内容,而不会实际被黑客攻击本身。保护您的网站免受这些事情的接收端很重要,但您必须首先解决更严重的威胁,以便您的网站不再是有毒的僵尸。)

答案 2 :(得分:2)

防止SQL注入。使用好的密码。并始终检查用户输入(如php中的_GET和_POST变量)。

答案 3 :(得分:2)

虽然它没有涵盖所有内容,但您可能需要考虑查看OWASP。他们最近发布了2010年Top ten,并给出了合理的概述常见安全漏洞。

答案 4 :(得分:1)

  • 确保您自己的机器未受感染。有很多特洛伊木马收集FTP密码。此外,永远不要在未加密的无线连接上使用FTP - 还有一些特洛伊木马使受感染的计算机收听无线通信并窃取密码。尽可能使用SFTP。
  • 找个体面的主人。一些廉价的托管服务提供商不会阻止网站更改另一个网站的文件,因此无论您做什么,您的网站都可能被同一服务器上托管的其他网页的漏洞攻击。
  • 始终在SQL查询中转义不受信任的输入。使用参数化查询会更好。
  • 在将其显示在网页上之前,始终转义不受信任的输入(包括当前URL,引用,浏览器用户代理,HTTP标头等)。这非常困难(对于一些非明显的攻击,请参阅http://ha.ckers.org/xss.html),使用像HTML Purifier这样的好库,而不是尝试编写自己的库。

答案 5 :(得分:0)

Driis提供了一个很好的答案。我想补充一点,使用存储过程也非常有用。

答案 6 :(得分:0)

我建议你使用Sessions和POST,而不是Get。

会话:https://www.w3schools.com/php/php_sessions.asp

您可以使用以下信息获取表单提供的信息:

HTML:

<form acion="post.php" method="post">
    <input type="text" name="somename"><br>
    <input type="submit" value="Submit">
</form>

腓:

<?php
    $text = $_POST["somename"];
    echo($text);
?>

你应该使用.htpasswd和.htaccess ......