Php 此有效性检查是否易受攻击?
我在一个页面中有此代码,该页面通过GET请求包含其他文件: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
$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()),但我想这只是多余的?我在和一位主持人争论,他一直说由于我的脚本,一些奇怪的东西被执行了,但我真的不能重现任何可以注入恶意代码的情况。我不认为这是允许注入东西的那一行