現在、私はフォームを使用して "コメント"を投稿し、データベースに保存しています。2つの隠しフィールドがあり、1つはコメントの構成要素を確認し、もう1つは隠しフィールドです。コメント番号。しかし私は私自身の形で悪用を見つけました。私が開発者用コンソールに入ると、コメントを他のフォームに、あるいは存在しないものにクロスポストするように変更することができます。これは本当に問題ではありませんし、コメントの数を変更することもできません。同じ番号のコメントがある場合でも正しく動作するためです。安全でないフォームのポスト値の検証
<form action="/index.php?option=com_comments&view=comment&row=<?= $row ?>&table=<?= $table ?>" method="post">
<input type="hidden" name="row" value="<?= $row ?>" />
<input type="hidden" name="table" value="<?= $table ?>" />
<textarea type="text" name="text" class="control control--textarea control-group__control" placeholder="<?= translate('Add new comment here ...') ?>" id="new-comment-text"></textarea>
<br />
<input class="leader btn btn--theme control-row__trigger" type="submit" value="<?= translate('Comment') ?>"/>
しかし、問題は、私は、コンソールに行き、私は追加してフォームを送信したときに、私は実際に私は他の誰かだと値とポストをオーバーライドすることができるということです。他の人として投稿できるようにすることは明らかに意図された動作ではありません。ポストが送信される前にcreated_byの値を検証する方法を見つけることができないようです。非表示の入力フィールドに入れても同様に変更できるからです。これを安全にするために私は何ができますか?
編集:転記は自動的に行われ、使用しているフレームワークのために私は文字通り何も変更できません。そして、適切なデフォルト動作を上書きします。私の質問にフレーズを付けるより良い方法は、ユーザーが特別な隠し入力フィールドを追加して余分な値を投稿するのを防ぐことができますか?投稿にcreated_byが含まれていて、それが現在のprofile_idに変更されている場合、毎回フォーム投稿チェックを投稿する必要がありますか?
悪意のあるコードは、あなたがセッションIDを使用することができる代わりに、ユーザIDと一緒にデータベース
[php]
$userHash = $db->prepare('SELECT user_hash FROM user WHERE id = :uId')->scalar([':uId' => $this->getUserId()]);
if (!empty($_SESSION['userHash']) && $_SESSION['userHash'] == $userHash) {
// process form
// generate new user hash
} else {
die('!HACKER!');
}
とのセッションやクッキーを使用することができデベロッパーコンソール経由
<form action="/index.php?option=com_comments&view=comment&row=2&table=blogs_blogs&created_by=6" method="post" class="ng-pristine ng-valid">
<input type="hidden" name="_token" value="a0b15d3664d7bc0e0e40675095fec014">
<input type="hidden" name="_token" value="a0b15d3664d7bc0e0e40675095fec014">
<input type="hidden" name="row" value="2">
<input type="hidden" name="created_by" value="6">
<input type="hidden" name="table" value="blogs_blogs">
<textarea type="text" name="text" class="control control--textarea control-group__control" placeholder="Add new comment here ..." id="new-comment-text"></textarea>
<br>
<input class="leader btn btn--theme control-row__trigger" type="submit" value="Comment">
</form>
created_byの生成方法を示すコードを投稿できますか? – larsAnders
この '= $row ?>'は '<?php echo $ row; ?>「好奇心から」 –
@クルシオビダ同じことをする。 – Justinas