我不想在这个项目中使用框架只有一个需要验证的值,我想确保我使用的方法相当安全和理智!< / 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没有被篡改
答案 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再次中断。