Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 此有效性检查是否易受攻击?_Php_Code Injection_Security - Fatal编程技术网

Php 此有效性检查是否易受攻击?

Php 此有效性检查是否易受攻击?,php,code-injection,security,Php,Code Injection,Security,我在一个页面中有此代码,该页面通过GET请求包含其他文件: $page = strtolower($_GET['page']); if(!$page or !$allow[$page] or $page == 'home') { header("Location: home.php"); } 其中,$allow是一个硬编码数组,其中包含要包含的有效文件的允许字符串列表。我是否遗漏了一些明显的允许代码注入的内容,或者该检查是否足够好?似乎还可以。只需在header()之后添加一个exi

我在一个页面中有此代码,该页面通过GET请求包含其他文件:

$page = strtolower($_GET['page']);

if(!$page or !$allow[$page] or $page == 'home') {
    header("Location: home.php");
}

其中,
$allow
是一个硬编码数组,其中包含要包含的有效文件的允许字符串列表。我是否遗漏了一些明显的允许代码注入的内容,或者该检查是否足够好?

似乎还可以。只需在header()之后添加一个exit()语句,以确保即使header()失败,脚本也会终止。

似乎没问题。只需在header()之后添加exit()语句,以确保即使header()失败,脚本也会终止。

只要不允许覆盖$allow,脚本就不会受到攻击

但它会发出通知,我个人不会对案件不敏感,所以我会这样做:

if (empty($_GET['page']) || empty($allow[$_GET['page']]) || ($_GET['page'] == 'home'))
{
    // Technically a header location should be a complete URL - http://...
    header("Location: home.php");
    exit();
}

只要不允许覆盖$allow,它就不易受攻击

但它会发出通知,我个人不会对案件不敏感,所以我会这样做:

if (empty($_GET['page']) || empty($allow[$_GET['page']]) || ($_GET['page'] == 'home'))
{
    // Technically a header location should be a complete URL - http://...
    header("Location: home.php");
    exit();
}
这就足够了

 $allow = array('home', 'another_one', 'blah');
 $page = isset($_GET['page']) ? $_GET['page'] : 'home';
 if(in_array($page, $allow, true))
     include "$page.php";
我不知道你为什么在那里使用“header”

这就足够了

 $allow = array('home', 'another_one', 'blah');
 $page = isset($_GET['page']) ? $_GET['page'] : 'home';
 if(in_array($page, $allow, true))
     include "$page.php";

我不知道你为什么在那里使用“header”

“good enough”是一个很宽的笔刷。你能扩大一点吗?此外,如果您知道$_GET['page']应该被限制为一小部分值(例如,整数或仅包含小写字母的标识符等),那么使用正则表达式验证数据不会有什么坏处。

“good enough”是一个很宽的笔刷。你能扩大一点吗?此外,如果您知道$_GET['page']应该限制为一小部分值(例如,整数或仅包含小写字母的标识符等)然后,用正则表达式验证数据不会有什么坏处。

如果$page的内容不符合要求,最好先在$page上执行正则表达式,以确保它符合可传入内容的净化标准,然后再进一步检查,然后不要进一步处理…

最好先在$page上执行regex,以确保它在进一步检查之前符合可传入内容的消毒标准,如果$page的内容不符合要求,则不要进一步处理…

register\u globals已关闭,因此这不是问题,不区分大小写只是方便后面的讨论。我知道我可以添加更多的限制性条件(可能只是一个ctype_alnum()),但我想这只是多余的?我在和一位主持人争论,他一直说由于我的脚本,一些奇怪的东西被执行了,但我真的不能重现任何可能注入恶意代码的情况。我不认为允许注入东西的行register_globals是关闭的,所以这不是一个问题,不区分大小写只是方便后面的包括。我知道我可以添加更多的限制性条件(可能只是一个ctype_alnum()),但我想这只是多余的?我在和一位主持人争论,他一直说由于我的脚本,一些奇怪的东西被执行了,但我真的不能重现任何可以注入恶意代码的情况。我不认为这是允许注入东西的那一行