我正在用PHP开发一个显示患者列表的页面。
我希望$ _POST ['userID']选择相应的患者(通过触发点击),问题是现在我不希望将userID显示给用户(它在数据变量中) )。我之前使用过这段代码:
PHP
<?php while ($row = $res->fetch_row()) { ?>
<td data-id="<?php echo $row[1]; ?>" class="patient">
</td>
<?php } ?>
JQUERY
<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>
那么,第二种解决方案会阻止人们找到用户ID吗?我的代码上有什么不安全的东西吗?还是一个更简单的解决方案?
答案 0 :(得分:1)
您的代码会打开一堆蠕虫。您如何保证结果集始终在同一订单中相同?
您打开患者列表页面
Order ID Name 1 154 Abraham Lincoln 2 97 Abraham Setrakian
然后一些人使用了另一名患者“亚伯拉罕马斯洛”,然后你陷入了深深的麻烦。
Order ID Name 1 154 Abraham Lincoln 2 998 Abraham Maslow 3 97 Abraham Setrakian
因为列表中的第2个不是Setrakian。 KABOOM。
使用一些轻型双向加密工具,如“RayCrypt”。使用页面特定键来盐UserID
,然后使用它。当javascript调用您的服务器端代码时,您知道如何解密代码。由于该代码是使用特定于页面的密钥加密的,因此它不能用于任何其他目的,例如查看“http://my.awesome.app/patient/view/97”
答案 1 :(得分:0)
您可能希望了解如何使用UUID并找到一个用于为您创建UUID的php类。
来自维基百科:
UUID的目的是使分布式系统能够在没有重要中央协调的情况下唯一地识别信息。在这种情况下,“唯一”一词应理解为“实际上独特”而不是“保证唯一”。由于标识符具有有限的大小,因此两个不同的项可能共享相同的标识符。需要选择标识符大小和生成过程,以使其在实践中充分不可能。任何人都可以创建一个UUID并使用它来确定一些信息,即任何人都无法无意识地创建相同的标识符以识别其他内容。因此,标有UUID的信息可以在以后合并到一个数据库中,而无需解决标识符(ID)冲突。
以下是关于使用指南的好读物。