我创建了一个网站,使用PHP& HTML,它涉及将数据提交到SQL数据库,但它只是将数据添加到数据库中,仅供某些人使用。对于它起作用的人以及它没有的人来说,它是完全随机的。
SQL服务器托管在与网站相同的服务器上,我已经在phpmyadmin中检查了我的SQL代码以确保其正常工作。
将数据提交给SQL服务器的PHP代码如下: -
<?php
#CHANGING POST VARS TO REG VARS
$submit = $_POST['Submit'];
$ign = strtolower($_POST['ign']);
$name = $_POST['rname'];
$email = $_POST['email'];
$age = $_POST['age'];
$reason = $_POST['reason'];
$duration = $_POST['duration'];
$date = date('Y-m-d');
if (isset($_POST['past_yes'])){
$pe = "1";
}else{
$pe = "0";
}
if ($ign !== "" and $name !== "" and $email !== "" and $age !== "" and $reason !== "" and $duration !== "" and isset($_POST['Submit'])){
$conn = mysql_connect("localhost", "wadmin", "CENSORED", "DibDibCraft-API");
$data = "INSERT INTO `custom_staffapp`
(`ign`,`name`,`email`,`age`,`reason`,`past`,`duration`,`date`)
VALUES('$ign','$name','$email','$age','$reason','$pe','$duration', '$date')";
mysql_query($conn, $data);
mysql_close($conn);
sleep(0.5);
$ign = "";
$name = "";
$email = "";
$age = "";
$reason = "";
$duration = "";
$pe = "";
header("Location: http://www.dibdibcraft.com/staff/apply_done");
}else $error = true;
?>
填写代码(包括HTML)可在此处找到:http://pastebin.com/vn8HReRG
我不知道这是否是我的代码中的错误,因为我使用的PHP检查器说没有问题,或者是否是我正在使用的服务器的问题。
我已经尝试了mysqli_query()
,以及我使用的所有mysqli
函数的mysql
等价物,同样的问题仍然存在。
服务器详细信息
操作系统:Ubuntu Server 15.04
RAM:4GB
PORTS:全部开放
WEB服务器:Apache2
LAMP:与MYSQL客户端一起安装
请告诉我您建议的任何建议,无论我是否需要服务器上的新软件或其他什么。 PS:与网站有关的所有文件都有775个权限(所以每个人都可以阅读并执行它们),如果有帮助的话。
预先感谢任何协助,Aaron:)
BTW:这是不重复,因为这里没有这样的问题,如果有的话,它还没有被回答。
答案 0 :(得分:0)
考虑到问题是代码破解,是由于用户输入的单个&amp;双引号。 我建议以下快速解决方案。在将所有输入保存到数据库之前对其进行过滤。
在文件开头添加以下内容
function filter(&$array) {
$clean = array();
foreach($array as $key => &$value ) {
if( is_array($value) ) {
filter($value);
} else {
$value = trim(strip_tags($value));
if (get_magic_quotes_gpc()) {
$data = stripslashes($value);
}
$data = mysql_real_escape_string($value);
}
}
}
filter($_POST); # filters $_POST and any nested arrays by reference
上面的函数将递归过滤所有元素并清理它们以连接到INSERT INTO
sql语句。保存到数据库中时,您的脚本不应该行为不端。