拥有隐藏接口的更好方法

时间:2012-10-26 12:37:45

标签: php interface hidden hidden-field

假设我有以下代码:

<?php
    $html = ' 
        <form id="formA">
            <!-- Form for user another than admin goes here /--> ';

    if ($userrole == 'admin') {
        $html .= ' <!-- Form for admin goes here /--> ';
    }

    $html .= '
            <input type="submit" value="Submit" />
        </form> ';

    print $html;
?>

我认为在我们的网页上实现隐藏界面是不好的,特别是当您尝试在$_GET['']上使用$userrole时,因为攻击者可能会尝试滥用网址上的查询字符串来查看如果页面上有任何调试模板。

我知道这对开发人员来说是一个糟糕的实现,但我不知道如何安全地执行这些操作。有任何想法吗?感谢。


更新1

当我尝试在userrole上保存_SESSION信息并且页面上的检查部分与我上面提到的相同时,它是否相同,这意味着,仍然有一个页面上隐藏的界面?


更新2

假设我有这两个表:

tblUser

UserID    UserName    UserRole
 101       Abc         1
 102       Bcd         1
 103       Cde         2

tblRole

UserRole   RoleName    V    A    U    D
 1          Admin      1    1    1    1
 2          User       1    1    0    0

注意:V,A,U,D代表VIEWADDUPDATEDELETE的授权。

此代码用于检查用户在页面上查看,添加,更新或删除某些内容的授权(似乎与上述第一个问题不同)。

然后,假设自第一次登录以来我已经保存了会话(我省略了登录和存储会话的代码 - UserIDUserRole)。我想在下面做的是,检查每个授权并使用if条件进行检查。

$V = checkauth($_SESSION['UserRole'], 1);
$A = checkauth($_SESSION['UserRole'], 2);
$U = checkauth($_SESSION['UserRole'], 3);
$D = checkauth($_SESSION['UserRole'], 4);

if($V == 1) { //Do something here }
if($A == 1) { //Do something here }
if($U == 1) { //Do something here }
if($D == 1) { //Do something here }

function checkauth($userRole, $mode) {
    $q = " SELECT V, A, U, D FROM tblRole WHERE UserRole = '" . $userRole . "' ";
    //I omit the connection code since it's not important here (not the topic)
    $fetch = mysqli_fetch_array($r);

    switch($mode) {
        case '1': return $fetch[0]; break;
        case '2': return $fetch[1]; break;
        case '3': return $fetch[2]; break;
        case '4': return $fetch[3]; break;
    }
}

在网页上实施代码是否相当安全?还是有比这更好的东西?我确定有......需要你的想法,伙计们! :)

1 个答案:

答案 0 :(得分:1)

您应该将他们的访问级别存储在数据库中。查询字符串中,Cookie中,会话中。当他们转到页面时,如果他们有正确的访问权限,请检查数据库,如果他们这样做,则显示正确的html。