0

サーバーにリクエスト/情報を送信するのが適切なユーザーであるかどうかを検証する必要があるこの状況で立ち往生しています。たとえば、ユーザーが友達の削除リクエストを送信します。URLには、友達のID(別のメンバーID)をパラメーターとして含めます。友達削除リクエストのIDを要求するメンバーも含める必要がありますか?

リクエストを送信するのが適切なユーザーであることを検証または確認しようとしています。一般的にこれを行うための最良の方法は何ですか?ユーザーがログインしている場合、ログインしているメンバーのIDで検証できますか?それとももっと良い方法はありますか?

4

3 に答える 3

2

認証がどのように機能するかを知らなければ、言うのは少し難しいです。

過去にこれを行う必要があったときは、サーバー側の認証を組み合わせてリクエストを送信するユーザーを識別し、URLパラメーターを使用してユーザーが削除するものを指定していました。削除リクエストを送信するには、ユーザーがログインする必要があります。$_SESSION変数を使用してユーザーIDを追跡しています。したがって、削除要求を受け取ると、SQLは漠然と次のようになります。

DELETE FROM 
    friends 
WHERE 
    userID=$_SESSION["id"] AND friendID=$_POST["friend"]

halferがコメントで説明しているように、これはコードにSQLインジェクションの脆弱性を開くため、一般的に悪い方法です。それを回避するいくつかの方法を検討することができます。

まず、データをサニタイズできます。friendIDが常に整数になることがわかっている場合は、それを確認できます。数字以外の文字をチェックする正規表現は機能します-そこに何か危険なものがある場合は、それを適切に処理し、データベースに渡さないでください。

2番目のアプローチは、私が好むアプローチです。クエリを実行するときに、プリペアドステートメントを使用して、パラメーターをそれにバインドできます。PDOを使用すると、次のような結果になります。

$sth = $dbh->prepare('DELETE FROM friends WHERE userID=? AND friendID=?');
$sth->bindParam(1, $_SESSION["id"]);
$sth->bindParam(2, $_POST["friend"]);
$sth->execute();
于 2012-07-13T16:10:49.933 に答える
0

セッション変数を使用して、ログインしたユーザーIDを保存します。セッションが確立され、認証スキームがlogged inフラグを挿入すると、すべて設定されます。logged inユーザーリクエストを実行する必要がある場合は、フラグを確認するだけです。

于 2012-07-13T16:08:42.460 に答える
0

このようなリクエストには、より安全なUUID識別子(ユーザーが生成して保存したもの)を要求するようにしてください。完全に安全ではありませんが、単純なIDよりもかなり優れています。

于 2012-07-13T16:11:47.997 に答える