Php 此代码易受黑客攻击吗?

  网络渗透测试     |      2023-03-29 11:19

Php 此代码易受黑客攻击吗?

php security url variables

Php 此代码易受黑客攻击吗?,php,security,url,variables,Php,Security,Url,Variables,我对在线web应用程序非常陌生。我正在使用php,我得到了以下代码: if(isset($_GET['return']) && !empty($_GET['return'])){ return = $_GET['return']; header("Location: ./index.php?" . $return); } else { header("Location: ./index.php"); } $return变量是URL变量,黑客可以很容易地更改它 例

我对在线web应用程序非常陌生。我正在使用php,我得到了以下代码:

if(isset($_GET['return']) && !empty($_GET['return'])){ return = $_GET['return']; header("Location: ./index.php?" . $return); } else { header("Location: ./index.php"); }

$return变量是URL变量,黑客可以很容易地更改它

例如,我从以下内容获得$return变量:?return=profile.php

有什么我需要注意的吗?我应该在这行中使用htmlentities吗:

header("Location: ./index.php?" . htmlentities($return)); 它容易受到黑客的攻击吗

我应该做些什么来防止黑客攻击?

如果你放入一个不存在的页面,会发生什么。例如:

return=blowup.php 或

您可以通过在变量中不包含.php来混淆引用。然后,您可以将其附加到代码隐藏中,并检查目录中是否存在该文件/在重定向到该文件之前使用允许值的switch语句。

除了第2行的输入错误(应为$return=$\u GET['return'];)您应该确保$return作为参数传递给index.php时是有效的QueryString

然后,index.php应该验证return是否是用户有权访问的有效URL。我不知道index.php是如何工作的,但如果它只是显示一个页面,那么最终可能会出现index.php?/etc/passwd或类似的内容,这确实可能是一个安全问题

编辑:你有什么安全漏洞?根据index.php如何使用返回值,我可以看到两个可能的问题:

如果index.php将用户重定向到目标页面,那么我可以使用您的站点作为中继,将用户重定向到我控制的站点。这既可以用于网络钓鱼(我创建了一个与你的网站一模一样的网站,并要求用户输入用户名/密码),也可以仅仅用于广告。

例如,看起来用户访问了您的站点,但随后被重定向到。由于我可以使用%xx符号对任何字符进行编码,用户甚至可能不太清楚这一点

如果index.php显示返回参数中的文件,我可以尝试传入一些系统文件的名称,如/etc/passwd,并获得所有用户的列表。或者我可以传递类似../config.php的消息,并获得您的数据库连接

我不认为这里是这样,但这是一个常见的安全漏洞,我仍然想指出它

如上所述,您希望确保通过querystring传入的URL是有效的。一些方法可以做到这一点:

$newurl=”“$返回;

这可以确保您始终只在您的域上,而不会重定向到任何其他域

$valid=($return)

如果$return始终是硬盘上存在的页面,则此操作有效。通过检查return是否确实指向有效文件,您可以过滤出伪造的条目

如果return接受querystring(即return=profile.php?step=2),则需要解析出“profile.php”路径

拥有$return的有效值列表,并与之进行比较

这通常是不切实际的,除非您真正设计了应用程序,使index.php只能返回给定的页面集

有很多方法可以剥下这只猫的皮,但通常您希望以某种方式验证$return是否指向有效的目标。这些有效目标是什么取决于您的规范。

在本例中,它更多地取决于如何处理index.php上的查询字符串部分。如果它被发送到数据库查询、输出、eval()或exec()是,这是一个非常常见的安全漏洞。大多数其他情况都可以安全地不过滤,但最好编写自己的通用清理函数,将所有类型的引号转换为HTML实体以及相等符号。

如果您运行的是PHP4或PHP5的旧版本,然后,我认为您将很容易受到标题注入的攻击—有人可以将return设置为URL,然后是一行return,然后是他们希望让您的服务器发送的任何其他标题

可以通过先清理字符串来避免这种情况。剥离行返回可能就足够了,但最好有一个允许的字符列表——这可能是不切实际的

4.4.25.1.2:此功能现在可防止多个标题被删除 立即发送以防止 头部注入攻击

我要做的事情是:

定义,允许什么类型的返回值

写下所有类型的可能返回值

然后,得出结论:哪些字符是不允许的,url的最大长度是多少,允许哪些域,等等

最后:根据以上结论制作一个过滤函数

我认为黑客可以做到这一点 如果$\u GET['return']包含任何内容,您将重定向 黑客可以将其用作xss 重定向到病毒或任何类似的东西 但是没有能力制造任何其他东西

你能回答这个问题吗:我遵循他们的方法(在问题中列出),但有安全漏洞。请帮帮我!!嗨,迈克尔,请查看我对肖尼的评论。我遵循他们的方法,最后在这里发布了这个问题。请帮助我,我已经对帖子做了一些更改,以指出一些问题 return=http://www.google.co.uk return=http%3A%2F%2F%2F