当前位置:  开发笔记 > 编程语言 > 正文

这种方法是否足够好/安全,足以向用户显示错误? - PHP

如何解决《这种方法是否足够好/安全,足以向用户显示错误?-PHP》经验,为你挑选了2个好方法。

我正在开发一个网站,由于用户输入或其他原因,我需要显示一些错误消息.为此,我有一个名为error.php的页面,我使用$ _GET获取错误号.所有错误消息都存储在一个数组中.

例:

header( 'Location: error.php?n=11' ); 

但我不希望用户在URL中输入错误代码并查看所有其他错误消息.为了防止这种情况,我想我可以将引用页面列入白名单,并且只有在我的白名单中找到引用者时才显示错误消息.

它应该是公平的(尚未测试;))

$accept = false;
$allowedReferer = array (0=>'page1.php', 'page2.php');
if (in_array($_SERVER['HTTP_REFERER'], $allowedReferer )) {$accept = true;}
if ($accept) { $n=$_GET['n'];echo "Error: " . $errorList[$n];}

这种方法是否足以避免间谍用户

我正在用PHP5做这个

谢谢



1> David Grant..:

不,它不是远程安全的:HTTP Referer标头对于欺骗是微不足道的,也不是必需的标头.我建议你阅读这篇文章,了解一个利用代码(用PHP编写)的例子,或者下载这个用于Firefox的附加组件,以便在您自己的浏览器中自行完成.

此外,您的$allowedReferer数组应该包含完整的 URL,而不仅仅是脚本名称,否则代码也可以从远程引用中利用,例如来自

http://www.example.org/page1.php

总结一下:您无法在不需要身份验证的情况下限制对任何公共网络资源的访问.



2> Paul Dixon..:

您可以简单地显示"就地"错误,而不是重定向 - 例如,像使用类似的东西调整您的当前代码一样简单

if ($error_condition)
{
    $_GET['n']=11;
    include "/path/to/error.php";
    exit;
}

在实践中,它可能会更复杂,但想法是相同的 - 用户会看到错误消息而不重定向.确保输出某种错误标题,例如标题("HTTP/1.0 401 Bad Request")告诉浏览器它没有真正看到所请求的页面.

如果您确实想要重定向,那么您可以通过包含错误编号的哈希来创建"防篡改"URL,并使用只有您的代码知道的盐,例如

$n=11;
$secret="foobar";
$hash=md5($n.$secret);
$url="http://{$_SERVER['HTTP_HOST']}/error.php?n={$n}&hash={$hash}";

现在你的error.php可以检查是否正确创建了提供的哈希.如果是,则很可能它是由您的代码创建的,而不是用户创建的.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有