原始代码 - PHP请求时的响应

Sou*_*rav 7 php security

正如Stopping Bot [SO]提出的那样- PHP我开发了一个PHP的反僵尸系统,可以在https://codereview.stackexchange.com/questions/2362/anti-bot-comment-system-php查看代码

但任何人都可以通过查看来获取令牌.因此,getToken.php
他们从stackauth.com[我认为通过查看页面代码] 得到令牌,但是当我浏览它时它只显示了一些文本!
我怎么能这样做?[代码只在代码请求时传递,而不是由浏览器传递]


在表单页面中生成和验证令牌的过程

$hash=sha1($time.$myKey);
echo $time.'#'.$hash;
Run Code Online (Sandbox Code Playgroud)

在海报/验证页面中

$token=explode($_POST['token'],'#',2);
if (sha1($token[0].$myKey)==$token[1])
 echo 'A good Human';  
Run Code Online (Sandbox Code Playgroud)

Edit
我没有在数据库中存储使用过的令牌,并且在[比较] 5分钟后令牌过期了!
认为一个坏用户获得令牌2011-05-18 11:10:12#AhAShKey000000000 他可以使用令牌提交随机文本到2011-05-18 11:15:12,我该如何解决这个问题?

Sou*_*rav 0

仔细阅读所有答案后,我开发了这个[感谢所有人的宝贵评论和答案]

<?php
$time = microtime();
for ($i=1;$i<=10000;$i++)
 generateMath();

echo 'Generating '.$i.' math Took '.(microtime()-$time);

function generateMath()
{
 $operands = array(43,45,42);
 $val = chr(rand(48,57));
 $ope = chr($operands[rand(0,2)]);
 $txt = $val.$ope; //42* 43+ 45- 47/
 $val2 = chr(rand(48,57));
 $txt .= $val2;
 $ans = 0;
 if ($ope == '+')
  $ans = $val + $val2;
 else if ($ope == '-')
  $ans = $val - $val2;
 else if ($ope == '*')
  $ans = $val * $val2;
 echo $txt.' -> '.$ans.'<br/>';
}
?>  
Run Code Online (Sandbox Code Playgroud)

这可以通过在中添加随机数量的空格来增强 $txt = $val.$spaces.$ope.$spaces.$val2;

而且它比验证码更快,如果人们在一小时内发布超过 30 条左右的评论,就必须做一个非常简单的数学计算!