关于php中sanitize和sql注入的问题[重复]

问题描述 投票:0回答:1

我正试图建立一个应用程序,以检测用户的输入(前20个字节)是否存在于我的数据库中。

但是,我被卡在了消毒和占位符的问题上,尤其是$stmt->execute()这一部分,任何意见和建议都会让我很感激。尤其是$stmt->execute()这一部分,任何意见和建议都将被感激不尽。

<?php
    echo <<<_END
            <form method='post' action='test.php' enctype='multipart/form-data' >
                Tester: <input type='file' name='uploadfile'>
                <input type='submit'>
            </form>
    _END;

    if($_FILES){
        require_once 'login.php';
        if (!$conn) {
            die(mysql_fatal_error());
          }
        $type = $_FILES['uploadfile']['type'];
        if($type == "text/plain"){
            $name = $_FILES['uploadfile']['name'];
            $fh = fopen($name, 'r') or die("File Does not exist");
            $content = file_get_contents($name, FALSE, NULL, 0, 20);
            $content = sanitizeMySQL($conn, $content);
            fclose($fh);
            $stmt = $conn->prepare("SELECT * FROM storage WHERE mydata like ?");
            $stmt->bind_param("s", $content);
            $stmt->execute();
            //$stmt->bind_result($content);
            if (!$stmt) {
                echo "Not Exist";
            } else {
                    echo "Exist";
            }
        } else {
            echo  "txt only <br>";
        }
}
php mysql
1个回答
0
投票

你的这部分代码已经对你的输入进行了消毒。

$stmt = $conn->prepare("SELECT * FROM storage WHERE mydata like ?");
$stmt->bind_param("s", $content);
$stmt->execute();

第一行列出了你的sql查询和参数。

$stmt = $conn->prepare("SELECT * FROM storage WHERE mydata like ?");

第二行将用户输入中的任何危险字符转义(即在 $content),并将其绑定在 ? 在上面一行的查询中。

$stmt->bind_param("s", $content);

第三行用你绑定的参数运行你创建的查询。

$stmt->execute();

一个不安全的方法是这样的。

$stmt = $conn->prepare("SELECT * FROM storage WHERE mydata like '$content'");

如果一个用户提交的内容是这样的: '; drop * from storage;//,那么结果查询将是。

SELECT * FROM storage WHERE mydata like ''; drop * from storage;//'

这将最终删除所有数据 在你的数据库中的mydata表。

© www.soinside.com 2019 - 2024. All rights reserved.