我没有';我不知道将数据库中的值放在htmlid属性中是否是一种好的做法


I don't know if it is a good practice to put values from database in html id attribute

我正在进行我的第一个php项目,我学到了很多。

在我的项目中,我曾经从数据库中放入html id属性值,以使我的工作更容易。例如:

<a id="nameOfMyTable_ID"> some link... </a>
<a id="idOfRow_idOfForeignKey_idOfCurrentUser"> .... </a>

没关系,还是我做错了?。。。。我不确定这是否是一个好的做法。有漏洞的机会吗?

对不起,这个问题对你们中的一些人来说可能听起来很愚蠢,但我真的不知道我是不是在做wright。

我本来打算把它作为注释,但有点大:

出现漏洞的可能性将取决于您在向用户展示这些值之前/之后如何处理这些值(我相信您正在对其进行修复):

  • 正如Michael在评论中所说,如果在将值写在HTML上之前不对其进行净化,XSS就有可能出现
  • 此外,考虑到这些ID在客户端,在数据库中使用它们之前,您需要对它们进行适当的消毒,以避免可能的SQL注入
  • 最后,即使你对它们进行了消毒,并且它们是正确的,你也需要仔细检查这些值是否有效和兼容。例如,假设您的ID是值为1_23_45的idOfRow_idOfForeignKey_idOfCurrentUser,但我不知怎么将其更改为1_34_78。那会发生什么?代码准备好了吗?还是我会更新别人的记录

我不知道ID在帖子上的显示方式是否可以被视为一种好的做法,就我个人而言,我不会这样做,即使我这样做了,我也会遵循一些规则:

  • 永远不要相信用户输入。还有什么比幽默更好的解释方式呢:http://xkcd.com/327/...对所有输入进行Sanitize,使用参数化查询
  • 永远不要相信自己的意见。即使你认为你是来源,你从数据库中读取的值也可能是由用户通过网络表单提供的。对所有输出进行消毒
  • 验证提供的数据是否有效。即使你对来自"未知"用户的数据进行了消毒,他们也可能手动更改了ID。例如:仔细检查正在执行操作的用户ID是否具有执行操作的权限
  • 将值放在正确的位置。为什么要将当前用户ID放在标签ID中?它应该在其他地方:一个会话变量,或者如果你想让它在客户端可用,一个隐藏的输入/变量;而对于其他ID,它们可能应该在hrefdata-属性中
  • 向用户提供尽可能少的信息。用户不需要知道您的ID,也不需要知道数据表/列名。。。一个"好人"不需要它们,一个"坏人"可能会用它们来对付你

我试着把重点放在那些适用于问题中的例子的例子上(尽管它们适用于任何项目),但可能遗漏了一些东西。

由于您正在将用户的id传递到<a>阶段的id属性中,我假设您正在尝试链接到需要用户id的页面。在这种情况下,您会希望将用户id作为链接中的GET参数传递。

更换

<a id="idOfRow_idOfForeignKey_idOfCurrentUser">...</a>

<a href="myOtherPage.php?id=<?=$userID?>"> .... </a>

注意:我将您的变量从$idOfRow_idOfForeignKey_idOfCurrentUser更改为$userID以使其更干净,但其想法是使用href属性

将用户id简单地传递到下一页