什么都没有$ _REQUEST

时间:2016-07-16 07:15:04

标签: php request

我想做以下但是失败。

$user_id = $_REQUEST['user_id'];

if (/* nothing to be requested*/) {
    echo "<button>Log In</button><button>Sign Up</button>";
} else {
    /* logged in, check if the user is an admin or not */
    if ( /* he is admin */ ) {
    echo "<button>Admin</button><button>Logout</button>";
    } else {
    /* then he is just a normal user */
    echo "<button>Logout</button>";
    }
}

原始代码:

$user_id = $_REQUEST['user_id'];
if (!$user_id) {
    echo "<button>Log In</button><button>Sign Up</button>"
} else {
    $check_sql = "SELECT admin from users where user_id = {'$user_id'}";
    $result = mysqli_query($con, $check_sql);
    $rows = mysqli_fetch_array($con, $result);
        if ($rows['admin'] == 1) {
        echo "<button>Admin</button><button>Log Out</button>";
        } else {
        echo "<button>Log Out</button>";
    }
}

当user_id为$ _REQUEST时,代码工作正常。但是当没有什么是$ _REQUEST时就失败了。你能帮忙吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

首先,请注意您的代码容易受到SQL注入攻击。这非常严重。您应该使用参数化查询或转义$user_id变量。

http://php.net/manual/en/security.database.sql-injection.php

另请注意,您的代码可能容易受到设置$user_id自己的人的攻击,因此可能会在他们不应该获得管理员权限时获得管理员权限。这是因为您使用的是$_REQUEST,这些值可以通过请求以您可能没有预料到的方式设置。或者,您可以将user_id存储在$_SESSION

http://php.net/manual/en/ini.core.php#ini.request-order

http://php.net/manual/en/reserved.variables.session.php

对于$user_id的检查,它应该是:

if(empty($user_id))

您可能还想修剪$user_id

如果您使用的是PHP&lt; 5.5:

$user_id= trim($user_id);
if(empty($user_id)

如果您使用的是PHP&gt; = 5.5

if(empty(trim($user_id))
  

确定变量是否为空。变量是   如果它不存在或者其值等于FALSE则认为为空。   如果变量不存在,empty()不会生成警告。

http://php.net/manual/en/function.empty.php