URl

时间:2016-12-14 21:45:02

标签: php mysql

我是新手,我刚刚建立了一个CRUD系统,但它根本不安全。编辑页面在URL中有ID号,用户可以简单地随机键入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保存了记录,但它仍然看起来不合适,并在网址中添加了id标记。

1 个答案:

答案 0 :(得分:0)

您必须在所有SQL查询中添加用户/记录所有者唯一标识,通常为:

if (is_array($array)) {
    foreach ($array as $key => $val) {
        $array[$key] = trim($val);
    }
}

通过这种方法,您可以确保用户只能访问他的记录。登录用户的ID可以放在$query = "SELECT * FROM table WHERE id = 1 AND user_id = 2";

不建议隐藏或散列ID,它是反模式的security through obscurity