我正在进行我的第一个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,它们可能应该在
href
或data-
属性中 - 向用户提供尽可能少的信息。用户不需要知道您的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
属性