PHP - 通过URL传递参数时拒绝访问

时间:2015-12-05 19:26:39

标签: php mysql

如果输入了正确的密码,我制作了一个php脚本,其中echo是一个图像;所以,没有人可以直接访问我服务器上存储的图像,从而使我的服务器更安全。现在,对于php脚本,我使用GET方法为我的数据库生成mysql_query,以检查用户输入的电子邮件和密码是否与相关帐户相关联,然后{{1}我服务器上的文件夹中的图像。现在,为了在运行时传递参数,我将它们添加到URL中,如下所示:

echo

但是,整个设置出了问题,我收到了以下错误:

  

警告:mysql_query()[function.mysql-query]:拒绝用户访问   ' uXXXXXXXXX' @' XX.XX.XX.XX' (使用密码:NO)in   第11行/home/uXXXXXXXXX/public_html/get_image.php

     

警告:mysql_query()[function.mysql-query]:指向服务器的链接   无法在/home/uXXXXXXXXX/public_html/get_image.php中建立   第11行获取数据时出错:用户拒绝访问   ' uXXXXXXXXX' @' XX.XX.XX.XX' (使用密码:否)

这是我的php脚本,http://<mywebserver>/get_image.php/?email=<email>&password=<password>&file_name=<image-file-name>

get_image.php

我同意,stackoverflow上已经有很多其他问题说明了类似的问题。但是,我没有找到适用于我的代码的问题的解决方案。因此,对此的任何帮助将受到高度赞赏。谢谢你的时间!

4 个答案:

答案 0 :(得分:0)

在您尝试向其发送查询之前,您似乎无法连接到数据库。

它应该是这样的:

$conn = new mysqli($servername, $username, $password, $dbname);

取自此处的示例: http://www.w3schools.com/php/php_mysql_select.asp

此外,如果您关心,您应该考虑使用PDO或其他一些防止SQL注入攻击的方法。

SQL注入: https://en.wikipedia.org/wiki/SQL_injection

有关PDO的信息: http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059

答案 1 :(得分:0)

这是因为您尚未将文件get_image.php连接到MySQL数据库。请按以下步骤操作:

$host="localhost"; // Host name 
$username="username"; // Mysql username 
$password="password"; // Mysql password 
$db_name="database"; // Database name 
$tbl_name="students"; // Table name 
// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

只需将上述信息替换为正确的信息即可。

答案 2 :(得分:0)

<?php

$db_host = "localhost";
$username = "DB_USER";
$passowrd = "DB_PASS";
$db_name = "DB_NAME";

$conn = new mysqli("$db_host", "$username", "$password", "$db_name");
if($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$file_path = "/ProfilePics/";

if(isset($_GET['email']) && isset($_GET['password']) && isset($_GET['file_name'])) {

$id = "\"" . $_GET['email'] . "\"";
$typed_password = "\"" . $_GET['password'] . "\"";
$file = $_GET['file_name'];

$sql = "SELECT * FROM students WHERE email = $id AND password = $typed_password)";
$result = $conn->query($sql);

if(!empty($result)) {

    if (mysql_num_rows($result) > 0) {

        $result = mysql_fetch_array($result);

        $user = array();
        $user["email"] = $result["email"];
        $user["password"] = $result["password"];        

        $pass = "\"" . $user["password"] . "\"";

        if($pass == $typed_password) {

        $img_path = $file_path . $file;

        echo '<img src="' . $img_path . '" name = "cover" />';

        } else {

            echo "Incorrect password";

        }
    } else {

        echo "Unable to find user";

    }

} else {

    echo "Unable to find user";

}
} else {

        echo "Required field(s) is missing";

   }
?>

答案 3 :(得分:0)

首先设置数据库连接:

$con = mysql_connect('server','username','password');
$rst = mysql_query('select...', $con);

请记住,访问mysql的那种库已经过时了。

想象某人使用此密码登录:

password ='“; DROP TABLE学生;'

或更精心制作的东西。

有不同的库,如PDO或MYSQLI,可以为您解决此问题。

在较新版本的php标准中,mysql libis已弃用并已删除