生成随机字符串变量并使用它更新MySQL字段。

时间:2015-04-11 15:31:34

标签: php mysql passwords bots

我有一个问题,就是有人使用机器人来开发我的网站。从日志中可以看出,在代码能够从其余额中扣除所请求的金额之前,他能够非常快速地发送多个请求。

我曾经考虑过每次执行时都会声明一个随机值,然后将其放入他的帐户行并与自身进行比较。这样每次运行时都会有所不同。

以下是代码的主管:

$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 ==

有没有人有任何想法?

由于

1 个答案:

答案 0 :(得分:0)

此时你正在创造一个解决方案。为了防止这种滥用,最好在根本原因停止它并使用数据库事务。

步骤:

1)使用INNODB

2)在php上使用事务封装。

从数据库更新并检索您的总计。由于它们现在处于事务中,因此下一个事务必须等待第一个事务,因此只能检索实际可用值。