我的代码是否阻止人们找到用户ID


Does my code prevent people from finding the userID?

我正在用PHP开发一个页面,其中显示患者列表。

我希望$_POST['userID']选择相应的患者(通过触发点击),问题是现在我不希望用户ID显示给用户(它在数据变量中)。我以前使用过这个代码:

PHP

<?php while ($row = $res->fetch_row()) { ?>
    <td data-id="<?php echo $row[1]; ?>" class="patient">
    </td>
<?php } ?>

查询

<script>
    userID = '<?php echo $_POST['userID ']; ?>';
    $('.patient').each(function(index, elem) {
        if ($(elem).data('id') == userID) {
            $(elem).trigger('click');
        }
    })
</script>

我把它改成这样,现在数据通过一个索引,而不是稍后用来查找用户的用户id:

PHP

    <?php 
        $i=0;
        while ($row = $res->fetch_row()) 
        { 
           $patientArray[$i] = $row[1]; 
    ?>
        <td data-pos="<?php echo $i; ?>" class="patient">
        </td>
    <?php 
            $i++;
        } 
    ?>

JQUERY

<script>
userID = '<?php echo $_POST['userID']; ?>';
<?php for ($i=0; $i<count($patientArray);$i++) { ?>
     pacient = '<?php echo $patientArray[$i]; ?>';
     if (pacient == userID)
     {
            patientpos = '<?php echo $i; ?>';
     }
<?php } ?>
    $('.patient').each(function(index, elem) 
    {   
        if ($(elem).data('pos') == patientpos)
            {
                $(elem).trigger('click');
            }
    })
</script>

那么,第二种解决方案会阻止人们找到userID吗?我的代码上有什么不安全的东西吗?还是更简单的解决方案?

您的代码打开了一个蠕虫罐头。如何保证您的结果集始终按相同顺序相同?

打开患者列表页面

订单ID名称1 154亚伯拉罕·林肯2 97亚伯拉罕·塞特拉基

然后一些使用进入另一个病人"亚伯拉罕·马斯洛",那么你就陷入了深深的麻烦。

订单ID名称1 154亚伯拉罕·林肯2 998亚伯拉罕·马斯洛3 97亚伯拉罕·塞特拉基

因为排名第二的不是Setrakian。卡博姆。

使用一些轻量级的双向加密工具,如"RayCrypt"。将UserID与特定于页面的键进行盐处理,然后使用该键。当javascript调用服务器端代码时,您知道如何解密代码。由于该代码带有特定于页面的键,因此无法用于任何其他用途,如查看"http://my.awesome.app/patient/view/97"

您可能想要研究使用UUID,并找到一个php类来为您创建UUID。

来自维基百科:

UUID的目的是使分布式系统能够在没有重要的中央协调的情况下唯一地识别信息。在这种情况下,"唯一"一词应被视为"实际唯一",而不是"保证唯一"。由于标识符具有有限的大小,两个不同的项目有可能共享相同的标识符。需要选择标识符的大小和生成过程,以便在实践中充分避免这种情况。任何人都可以创建一个UUID并使用它来识别某个东西,并且有合理的信心,任何人都不会无意中创建相同的标识符来识别其他东西。因此,用UUID标记的信息可以稍后组合到单个数据库中,而无需解决标识符(ID)冲突。

这里有一篇关于使用指南的好文章。

http://blog.codinghorror.com/primary-keys-ids-versus-guids/