【问题标题】:How secure is my website?我的网站有多安全?
【发布时间】:2011-02-12 04:00:05
【问题描述】:

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

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

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

【问题讨论】:

  • 您可能想提及您编写网站的内容。
  • 把网址贴出来,我会告诉你.. >;P
  • 告诉我们他们对您的网站做了什么也可能有助于我们为您指明防止它的正确方向。
  • @chris 和 @Sky - 我现在没有可显示的网站。目前这只是黑客的废话。在进入我的 FTP 的过程中
  • 啊,我明白了,你是说很明显该网站被黑客入侵了,因为它不再可用,但很难确切地说他们做了什么?

标签: php mysql security web


【解决方案1】:

这是一个非常广泛的问题,因此您会得到同样广泛的答案。

为了测试您网站的安全性,您可以使用penetration testing。有些公司会为您做到这一点。你也可以看看Google Skipfish

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

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

【讨论】:

  • @Doug:阅读文档。如果遇到困难,请通过serverfault.com 寻求帮助
【解决方案2】:

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

SQL 注入发生在您从一些不受信任的来源(即整个该死的世界!)获取输入并将其用作 SQL 查询时。解决方法是停止使用字符串替换来构建查询和更新,并严格遵守 参数化 查询/更新。请注意,使用魔术引用是处理此问题的一种方法要差得多,因为它更容易出错; “always parameterize every query”是一种更简单且更易于审计的方法。 (是的,您需要在这里真正审核您的所有代码。对此感到抱歉。)

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

(要注意的另一件事是 XSS,尽管它完全不是对您网站的攻击。当您没有引用来自的不受信任的内容时,就会发生这种情况您的数据库正确,允许从您的网站提供恶意内容,而不会实际被黑客入侵本身。保护您的网站不成为此类事情的接收端很重要,但您必须首先解决更严重的威胁,使您的网站不再是有毒的僵尸。)

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

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

        【讨论】:

        • +1 我完全看到人们通过 FTP 获得所有权。我不知道为什么有人使用那些垃圾。
        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          我建议您使用 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:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-07
            • 1970-01-01
            • 2011-03-20
            • 2020-09-07
            相关资源
            最近更新 更多