PHP的mysql只适用于某些人

时间:2015-12-13 17:02:50

标签: php mysql sql-server mysqli

我创建了一个网站,使用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:这是重复,因为这里没有这样的问题,如果有的话,它还没有被回答。

1 个答案:

答案 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语句。保存到数据库中时,您的脚本不应该行为不端。