【发布时间】:2015-06-17 05:54:15
【问题描述】:
我遇到了一个问题,有人正在使用机器人来利用我的网站。从日志中可以看出,在代码能够从他的余额中扣除所请求的金额之前,他能够非常快速地发送多个请求。
我曾考虑在每次执行时声明一个随机值,然后将其放入他的帐户行并与自身进行比较。这样每次运行都会有所不同。
下面是代码的头部:
$player=mysql_fetch_array(mysql_query("SELECT `id`,`time`,`ex`,`btc`,`string` FROM `players` WHERE `hash`='".prot($_GET['_unique'])."' LIMIT 1"));
$random = base64_encode(openssl_random_pseudo_bytes(10));
$setstring = $random;
mysql_query("UPDATE `players` SET `string` = $setstring WHERE `id`=$player[id] LIMIT 1");
$playersec=mysql_fetch_array(mysql_query("SELECT `string` FROM `players` WHERE `hash`='".prot($_GET['_unique'])."' LIMIT 1"));
if (!is_numeric($_GET['amount']) || (double)$_GET['amount']>$player['btc'] || (double)$_GET['amount']< 0 || $setstring != $playersec['string'] ) {
$error='yes';
$con=1;
}
我很确定这是问题所在,因为它在执行时没有在string 字段中添加任何内容,即它是空的。
mysql_query("UPDATE `players` SET `string` = $setstring WHERE `id`=$player[id] LIMIT 1");
但当我跑步时:
<?php
$random = base64_encode(openssl_random_pseudo_bytes(10));
$setstring = $random;
echo $setstring;
?>
它输出正常:IAXUqtKraNDb1Q==
有人有什么想法吗?
谢谢
【问题讨论】:
-
将 $setstring 括在引号中。
-
将
or die(mysql_error())添加到mysql_query()。 MySQL 会告诉你语法错误在哪里。 -
@Abovestand 做到了,谢谢!