2017-03-31 4 views
0

こんにちは、私はちょっと写真アップロードサイトに取り組んでいます。悪用できる問題を発見しました。画像IDをPHPファイルに渡す安全な方法

私はすべての画像を表示するforeachを使用して行うので、HTML内の1枚の画像は、次のようになります

<a href="edit.php?id=ID_OF_PIC"><img src="IMG_PATH"></a> 

大文字で書かれたものは一例ですが、作業の値があります。 edit.phpには、idがピクチャ名の更新に使用されます。しかし、私が卑劣なスマートハッカーであれば、私はをhrefに変更することができ、このように私は別の投稿を変更することができます。どのように/どこでidを保存/非表示にして誰もそれを変更できないのですか?

+0

'a'タグは投稿データを送信しません。あなたは' method = post'のフォームを使用し、 '誰も変更できませんか? 'クライアントブラウザは** everthing **を操作できません。移動してF12をブラウザで開きます。そこには、あなたが望むように、ライブビデオやJavaScriptコードも変更できます。 – JustOnUnderMillions

+0

@JustOnUnderMillions私はポストデータとは、1つのエントリを意味していません。実際には 'GET'として渡されません。 – WasteD

+0

@JustOnUnderMillionsより理解しやすくするために変更しました。 – WasteD

答えて

1

@Qirelは簡単な解決策を見つけました。実際これを行うことはあまり難しくありません。私の例では、画像を編集するユーザーが画像の所有者であるかどうかを確認するだけです。

1

単純な解決策:フォームforeachイメージを使用します。 Like:

<form action="edit.php" method="post"> 
    <input type="hidden" value="ID_OF_PIC" name="id"> 
    <input type="hidden" value="TOKEN" name="tokenID_OF_PIC"> 
    <img src="IMG_PATH"><input type="submit" value="edit"> 
<form> 

フォームを送信する前に、TOKENを作成してIDに関連してセッションに保存してください。

$_SESSION['tokens'][ID_OF_PIC]='TOKEN_FOR_ID_OF_PIC';

トークンは、各画像IDの一意の文字列であるべきです。

フォームが転記されると、IDとトークンが取得されます。 IDとTOKENが有効かどうかを確認できます。

if($_SESSION['tokens'][ID_OF_PIC]==$_POST['tokenID_OF_PIC']){}

は、これは右のトークンでフォームを介してサーバによって送信されたユーザーのみ編集写真をallowes。

しかし、これにより、IMG_PATHにもIDが含まれていると、ブラウザで画像を開いて表示することができます。

+0

あなたの努力をお寄せいただきありがとうございます。私はあなたの答えに間違いはないと思いますが、@ Qirelは私にはより簡単な解決策を与えました。ありがとうございました! – WasteD

+0

より良い解決策があればそれを@WasteDとし、回答を投稿して受け入れます。あなたが役に立つと感じる他の回答を確実にアップアップするには、ちょうど良いものを受け入れるのではなく、他のサイトのユーザには全く役に立ちません。 – Steve

+0

@Steve実際にQirelはソリューションを投稿します。 – WasteD

関連する問題