gpt4 book ai didi

来自用作 PHP 数组键值的 HTTP GET 数据的 PHP 注入(inject)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:03:49 25 4
gpt4 key购买 nike

我想知道在以下情况下是否存在可能的代码注入(inject)(或任何其他安全风险,例如读取您不应该读取的内存块等...),其中未清理数据 来自 HTTP GET 在 PHP 的代码中 作为数组的 KEY。

这应该将字母转换为它们在字母表中的顺序。 a 到 1,b 到 2,c 到 3 .... HTTP GET“字母”变量应该有值字母,但正如你所理解的,任何东西都可以发送到服务器:

HTML:

http://www.example.com/index.php?letter=[anything in here, as dirty it can gets]

PHP:

$dirty_data = $_GET['letter'];

echo "Your letter's order in alphabet is:".Letter2Number($dirty_data);

function Letter2Number($my_array_key)
{
$alphabet = array("a" => "1", "b" => "2", "c" => "3");

// And now we will eventually use HTTP GET unsanitized data
// as a KEY for a PHP array... Yikes!

return $alphabet[$my_array_key];

}

问题:

  1. 您是否发现任何安全风险?
  2. 如何清理 HTTP 数据以便能够在代码中将它们用作数组的 KEY?
  3. 这种做法有多糟糕?

最佳答案

我看不出这种做法有什么问题。您...错误...从 $_GET 获得的任何内容都是一个字符串。除非您调用eval(),否则它不会构成任何安全威胁。在上面。任何字符串都可以用作 PHP 数组键,并且不会产生任何不利影响(尽管如果您使用非常长的字符串,显然这会影响内存使用)。

它不像 SQL,您在其中构建要稍后执行ed 的代码 - 您的 PHP 代码已经构建并正在执行ing,这是您唯一的方法可以通过调用 eval()include()/require() 来修改它在运行时执行的方式。

编辑

考虑到除了 eval()include() 之外,还有其他一些方法可以影响此输入脚本的操作,即使用提供的字符串动态调用函数/方法,实例化对象,或在变量变量/属性中。例如:

$userdata = $_GET['userdata'];

$userdata();
// ...or...
$obj->$userdata();
// ...or...
$obj = new $userdata();
// ...or...
$someval = ${'a_var_called_'.$userdata};
// ...or...
$someval = $obj->$userdata;

...如果您要先清理 $userdata,那将是一个非常糟糕的主意。

但是,对于您正在做的事情,您无需担心。

关于来自用作 PHP 数组键值的 HTTP GET 数据的 PHP 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7341140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com