这是一个有效的MySQL注入问题吗?

时间:2014-02-11 15:51:56

标签: php security mysqli code-injection

显然,使用MySQL注入的最简单方法是通过GET变量。

然而,在我的一些更复杂的页面中,我使用PHP Include:

$template = "template-id";
include($_SERVER['DOCUMENT_ROOT']."/mandrill/sender.php");

在sender.php文件中使用 $ template 来查询数据库。黑客是否可以创建恶意PHP文件并包含 sender.php 文件并使用 $ template 变量来注入代码?

我是否应该对此进行保护,或者这是否适用于大多数用例?

3 个答案:

答案 0 :(得分:1)

这是服务器上的安全设置问题。如果设置正确,黑客就不应该做那样的事情。

两个主要漏洞是:

  1. 如果已启用注册全局变量且您尚未使用值填充$template
  2. 如果您以某种方式允许未经授权的用户将自己的PHP脚本上传到您的服务器(这是某人可以包含您的PHP脚本的唯一方式)。
  3. 第一个永远不应该是一个问题,因为寄存器全局变量总是被禁用。您还应该初始化变量而不是让它们未设置。

    第二个更复杂,但除非您故意打开安全设置,否则不应成为问题。您通常应该设置合适的文件权限,以防止Apache(或其他Web服务器用户/组)添加/修改主站点文件,等等。

    话虽如此,如果某人可以将他们自己的PHP脚本上传到您的服务器,那么所有的赌注都会被取消。 SQL注入在那时变得无关紧要,因为它们可能很容易直接访问数据库。

答案 1 :(得分:0)

所有动态插值必须经过严格的转义或绑定作为参数。将任何和所有变量视为包含瘟疫。也许他们不会,但为了确保您的 SQL语法正确,它不会受到伤害。无论如何,这都是“SQL注入预防”。

答案 2 :(得分:-1)

这是不可能的。

只要您不让用户使用任何类型的输入填充$template,就不会发生任何事情。

尽管如此,请确保不要直接公开sender.php,通过.htaccess或通过检查您在配置中某处设置的每个文件中的常量