php文件中的硬编码凭据可防止加载静态文件

时间:2013-03-03 18:13:49

标签: php

为了从头开始学习无框架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的内置服务器为每个静态文件(bootstrap,jquery等)回复“PHP通知:未定义索引:用户名...”,更糟糕的是 - 静态文件做不加载!

我做错了什么?

3 个答案:

答案 0 :(得分:2)

使用

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

}

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

答案 1 :(得分:1)

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

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

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

这是有效的,因为PHP使用快捷方式布尔评估 - 意味着如果左半部分变为false,则不会评估该表达式的右侧。

答案 2 :(得分:0)

看到这一行

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

每当你有$_GET['username']的空/无值时,你都会收到此错误..你需要调整你的代码,以便你也能处理这种情况,比如

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

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

normal cose
}