0

以下のコードがあるとします。

<?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;
?>

攻撃者がURLのクエリ文字列を悪用して、ページにデバッグテンプレートがあるかどうかを確認しようとする可能性があるため、特に$_GET['']その上で使用しようとしている場合は、Webページに非表示のインターフェイスを実装するのは悪いことだと思います。$userrole

開発者にとっては悪い実装であることは知っていますが、それを安全に行う方法がわかりません。何か案は?ありがとう。


更新1

userroleに情報を保存しようとし_SESSIONていて、上記のようにページに同じチェック部分がある場合、つまり、ページに非表示のインターフェイスがまだある場合も同じですか?


更新2

次の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は、、、VIEWおよびの認証ADDを表します。UPDATEDELETE

このコードは、ページ上の何かを表示、追加、更新、または削除するユーザーの承認を確認するためのものです(上記の最初の質問とは異なるようです)。

次に、最初のログイン以降にすでにセッションを保存していると仮定します(ログインしてセッションを保存するためのコードを省略します-UserIDおよびUserRole)。そして、以下でやりたいのは、それぞれの認証と使用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;
    }
}

コードはWebページに実装するのに非常に安全ですか?それともこれより良いものがありますか?きっとあると思います...皆さんのアイデアが必要です!:)

4

1 に答える 1

1

それらのアクセスレベルをデータベースに保存する必要があります。クエリ文字列、Cookie、およびセッションではありませページに移動したら、データベースに対して正しいアクセス権があるかどうかを確認し、アクセスできる場合は正しいhtmlを表示します。

于 2012-10-26T12:41:58.160 に答える