php使隐藏的字段防篡改?

时间:2014-06-06 13:10:36

标签: php forms spoofing

我不想在这个项目中使用框架只有一个需要验证的值,我想确保我使用的方法相当安全和理智!< / p>

我在网络根目录之外的包含中设置了$ secret值

表单看起来像这样($ salt是一个随机整数,每个表单都是一个新的)

<form name="deleteform" action="#" method="get">
<input type="hidden" name="check" value="<?=sha1($salt.$secret.$songid)?>"/>
<input type="hidden" name="songid" value="<?=$songid?>"/>
<input type="hidden" name="salt" value="<?=$salt?>"/>
<input type="hidden" name="action" value="delete"/>
<input type="submit" value="Delete"/></form>

当表单返回时,我使用$ salt $ songid的返回值以及$ secret计算新的sha1并将其与$ check进行比较

如果它们相等,我认为返回的$ songid没有被篡改

2 个答案:

答案 0 :(得分:0)

使用$ _SESSIONS是可行的方法。即使你想仍然做防篡改隐藏领域的想法。为了使其防篡改,您必须在提交后设置服务器端的值。您可以使用jQuery的.preventDefault()执行此操作,在该点设置隐藏字段的值,然后继续提交。但为什么要采取额外措施呢?

只需使用get go中的会话,例如:

session_start();

$_SESSION['name'] = value;

echo $_SESSION['name'];

答案 1 :(得分:-1)

$ _ SESSION是要走的路......你的设计的缺点是人们仍然可以通过复制/粘贴值来调整表单。

另外,如果他们弄清楚你正在做什么样的检查,那么绝对没有什么可以阻止他们自己投入歌曲,计算他们自己的sha1哈希并将其填入你的检查字段。

会议的一般介绍:

 session_start();

$_SESSION['songid']=your song id;

你已经完成了...现在,songid值存储在服务器上,除了你之外什么都不能篡改它......除非openSSL再次中断。