私は初心者ですが、私はCRUDシステムを構築しましたが、それはまったく安全ではありません。編集ページにはURLにID番号があり、ユーザは単純にデータベースの他のレコードにアクセスするためにIDをランダムに入力することができます。UR1内のPHP/MySQL暗号化ID
http://example.com/example_edit.php?id=2
<?php
include_once("connection.php");
$result = mysqli_query($mysqli, "SELECT * FROM mkregistrationchecklists WHERE login_id=".$_SESSION['id']." ORDER BY id DESC");
?>
<tbody>
<?php
while($res = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>".$res['id']."</td>";
echo "<td><span class='label ".$res['labelwarning']."'>".$res['status']."</span></td>";
echo "<td>".$res['todaysdatetime']."</td>";
echo "<td>".$res['tag']."</td>";
echo "<td>".$res['serialnumber']."</td>";
echo "<td>".$res['currentequipment']."</td>";
echo "<td>".$res['company']."</td>";
if ($res['status'] == "Submitted") {
echo "<td><a href='page_read.php?id=$res[id]' class='btn btn-default glyphicon glyphicon-eye-open'></a></td>";
} else{
echo "<td><a href=\"page_edit.php?id=$res[id]\" class='btn btn-default fa fa-pencil-square'></a> | <a href=\"page_delete.php?id=$res[id]\" class='btn btn-danger fa fa-trash' onClick=\"return confirm('Are you sure you want to delete?')\"></a></td>";
}
echo "</tr>";
}
?>
</tbody>
これを確保する上で最善のアプローチは何ですか?
このように暗号化する必要がありますか?
$secure_id = $_GET['id'];
$decryped_id = base64_decode($secure_id);
私はlogin_idに従ってレコードを保存していますが、それでもURLのidタグでは専門家ではないように見えます。
ベース64エンコーディングは暗号化ではなく*暗号化です。 IDを非表示にするには、トークン(塩漬けのハッシュ、さらにはUUID)を生成する必要があります。このトークンは、レコードの他の情報と一緒にデータベースに格納します。 –
これはセキュリティに関連していませんが、これは開発アーキテクチャです。まず、IDが1,2,3,4のレコードにアクセスする権限を持っているユーザーであることを覚えておいてください。URIを介してページを手動で切り替えることができます。あなたのユーザーがすべてのレコードIDにアクセスしてレコードを編集する権限を与えられているかどうかは関係ありません。要求しているIDが現在のユーザーに許可されているかどうかにかかわらず、ページの上部にチェック(ミドルウェア)を配置する必要があります。 – webDev
また、最も重要なことは(@ Shaileshが言ったように)パーミッションをチェックしていることです。とにかく権限のないアクセスをブロックした場合、ユーザーがアイテムIDを知っている場合は誰が気にしますか?あなたがやっていることが情報を不明瞭にしているのであれば、それは曖昧さによるセキュリティと呼ばれ、それは良いアイデアではありません。ユーザーが提供するアイテムIDに関係なく、データの表示/更新/削除の権限を確認する必要があります。 –