我是PHP的新手,所以请多多包涵。 由于我正在从事创建CSRF易受攻击站点的项目,因此我设置了Xampp。这将模拟容易受到的银行转帐。我需要为传输创建一个php页面。我已经映射了代码,因为它是一个即将结束的项目。我填充了数据库,并确保该部分一切正常。但是似乎存在某种问题,因为由于某种原因,数据库没有更改为完全相同的值+1,而是添加到了接收方,而不是增加传输的值。我无法弄清楚。
$target = $_GET['TransferTarget'];
$amount = $_GET['TransferAmount'];
$target_query = "SELECT * FROM accounts acc WHERE (acc.AccountNumber = '$target')";
$target_result = mysqli_query($connection, $target_query);
$target_balance = mysqli_data_seek($target_result, 0);
$target_balance = $target_balance + $amount;
$source_balance = $source_balance - $amount;
$update_target_query = "UPDATE accounts SET accounts.Amount = '$target_balance' WHERE accounts.AccountNumber = '$target'";
$update_source_query = "UPDATE accounts SET accounts.Amount = '$source_balance' WHERE accounts.AccountNumber = '$source_account'";
$update_target_result = mysqli_query($connection, $update_target_query);
$update_source_result = mysqli_query($connection, $update_source_query);
例如,如果我将100美元转移到已经有1000,即1100的acc上,则预期的结果将是。 对于同一示例,我得到的结果是最终帐户中有101美元。因此,目标帐户更新为101美元。我似乎无法理解为什么会这样。
答案 0 :(得分:1)
mysqli_data_seek
仅根据操作是否成功返回true或false。
php的宽松性质使您可以向true
添加$ amount,并为100 + true = 101
加上数字。
您可能希望使用fetch
方法之一来代替mysqli_data_seek。
答案 1 :(得分:-1)
在代码内
$target_balance = mysqli_data_seek($target_result, 0);
$ target_balance将初始化为true或false,因为mysqli_data_seek()方法返回true或false分别表示1和0。
这就是为什么如果交易量为100,您将获得101。
解决方案:
$target_details = mysqli_data_seek($target_result, 0);
$target_balance= $target_details['target_balance'];
$source_balance= $target_details['source_balance'];
然后在执行操作时使用两个变量...
警告:您的代码不受保护,使用sql_injection非常容易。阅读有关如何保护代码的更多信息。
[更新]
$target_result = mysqli_data_seek($target_result, 0);
///New line
$target_result=mysqli_fetch_assoc($target_result);
//End new line
$target_balance= $target_details['target_balance'];
$source_balance= $target_details['source_balance'];