0

私はWAMPを使用しており、PHPファイルをローカルでホストしています。

これらの2つのファイルがあると仮定します。

customer.php-顧客の詳細を追加するためのフォーム

recordCustomer.php-データベースに接続し、データベースに情報を保存します(すべての処理が行われる場所)

アドレスバーにファイル名を入力して、ユーザーがファイルrecordCustomer.phpにアクセスできないようにするにはどうすればよいですか。

http://localhost/testing/recordCustomer.php has to be redirected and given an error message

でも

http://localhost/testing/customer.php is allowed

ありがとうございました

4

3 に答える 3

1

問題はアクセスではなく、recordCustomer.phpアクセスが直接の場合にコードを実行するという事実です。たとえば、htaccess によるアクセスを防止すると、フォームを送信できなくなります。

フォームでランダム トークンを使用する必要がありますcustomer.php。トークンはセッションに保存され、非表示の入力とともにフォームに挿入されます。

トークンrecordCustomer.phpが指定されているかどうか、およびセッション内のトークンと一致するかどうかを確認するだけです。

一致する場合 => これはrecordCustomer.php
else への正当な呼び出しです => フォームをバイパスしてみて、リクエストを拒否してください。

それはCSRF攻撃の学校のケースです;)

たとえば、ここを見てください

于 2012-09-19T09:10:32.300 に答える
1

recordCustomer.php全体へのアクセスをブロックする必要はありません。ページを呼び出しているユーザーが、フォームで送信しているレコードを変更する権限を持っているかどうか、recordCustomer.phpの開始時に確認する必要があります。そうでない場合は、エラーを表示します。

アイデアが得られるように、いくつかのコードを貼り付けます。

recordCustomer.phpの擬似/php コード:

if (! isset($_SESSION['user_logged'])) {
    echo 'You have to be logged in to access this page (this incident will be logged)';
    exit;
}

$user = $_SESSION['user_logged']; //this was saved when the user logged in
$record = $_POST['record_to_modify'];

if (!user_can_modify_record($user, $record)) {
    echo 'You dont have permission to access that record (this incident will be logged)';
    exit;
}

//HERE THE REST OF recordCustomer.php

function user_can_modify_record($user, $record) {
   $set = db_query("select user from table where user = '". $user. "' and record_id = ". $record);
   return db_count_rows($set) > 0;
}
于 2012-09-19T09:30:39.677 に答える
0

ファイルがフォームから要求されているかどうかを確認するには、次を確認します。

if(isset($_POST['submit']))

于 2012-09-19T09:12:47.913 に答える