以下のコードがあるとします。
<?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
を表します。UPDATE
DELETE
このコードは、ページ上の何かを表示、追加、更新、または削除するユーザーの承認を確認するためのものです(上記の最初の質問とは異なるようです)。
次に、最初のログイン以降にすでにセッションを保存していると仮定します(ログインしてセッションを保存するためのコードを省略します-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ページに実装するのに非常に安全ですか?それともこれより良いものがありますか?きっとあると思います...皆さんのアイデアが必要です!:)