【问题标题】:Hard-coded credentials in php file prevent static files loading [duplicate]php文件中的硬编码凭据阻止加载静态文件[重复]
【发布时间】:2013-02-17 19:11:02
【问题描述】:

为了从零开始学习无框架的php,我写了一个admin.php文件,代码如下:

<?php

$not_auth_msg = "<h1>Not Authorized</h1>";
if($_GET['username'] == "admin") {
    $pass = md5($_GET['password']);
    if($pass != "21232f297a57a5a743894a0e4a801fc3") {
        exit($not_auth_msg);
    }
} else {
    exit($not_auth_msg);
}

?>

<!doctype html>
<html>
<head>
  <!-- link to bootstrap -->
  <!-- jquery script -->
  <!-- etc -->
</head>
..
..
..
</html>

授权工作正常,但 php 5.4 的内置服务器会为每个静态文件(引导程序、jquery 等)回复“PHP 通知:未定义索引:用户名...”,更糟糕的是 - 静态文件会不加载!

我做错了什么?

【问题讨论】:

  • 您应该使用 isset() 来检查是否设置了 $_GET['username']。

标签: php


【解决方案1】:

改变 if
if(isset($_GET['username']) && $_GET['username'] == "admin") {
...

}

这将解决您的问题。当您不提供username 时,该密钥未在$_GET 中设置,并且如果您的php.ini 文件必须为ALL 则错误通知,即将显示/呈现通知。

【讨论】:

  • 所以现在我没有得到异常但是静态文件没有像以前那样被加载@user2129388
  • 这是因为您在 else 块中使用 exit() 不会呈现超出该代码行的任何内容。将您的PHP 代码放在&lt;head&gt; 之后,这将解决问题。
  • 我发现了问题,它与 php 的代码位置无关,我只是在我的路径中有一个额外的“/”字符(见 php 扩展名之后):admin.php/?username =admin&password=admin 至于例外情况,我正在使用您的答案,它有效,谢谢。 @user2129388
【解决方案2】:

当您尝试访问数组中不存在的元素时会导致该通知。在您的情况下, $_GET 超全局实际上没有“用户名”元素(意思是,您没有通过 url 传递用户名)。

您可以在实际检查元素内容之前更改代码以测试元素是否存在:

if(array_key_exists('username',$_GET) && $_GET['username'] == "admin") {
  ...
}

之所以有效,是因为 PHP 使用快捷布尔求值 - 这意味着如果左半部分结果为 false,则不会计算该表达式的右侧。

【讨论】:

  • 所以现在我没有收到异常,但静态文件没有像以前那样被加载@Hazzit
【解决方案3】:

看到这一行

if($_GET['username'] == "admin")

只要$_GET['username'] 为空/没有值,您就会收到此错误。您需要调整代码以便也能处理这种情况,例如

if(!isset($_GET['username'])){

your code....to handle this index error
}else{

normal cose
}

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2021-05-20
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多