1

そのため、インジェクションから保護しながら get メソッドを使用しようとしています。データベースからデータを取得してページにエコーアウトしようとしています。以下のコードで何をしようとしているのかは明らかだと思いますが、正しい構文を使用するには助けが必要です。

インジェクションから保護されている mysqli を使用してデータベースからデータを取得するための準備ステートメントの正しい構文を誰かに教えてもらえますか?

私が探しているものが見つからないように見えるこのサイトと、最新の方法が見つからないPHPサイトを見てきました。すべての助けをありがとう。

<?php
$mysqli = new mysqli("", "", "", "");
if ($mysqli->connect_error) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_error . ") " . $mysqli->connect_error;
}

$stmt = $mysqli->stmt_init();

if($stmt->prepare("SELECT 'name,name' FROM 'table' WHERE 'name, name' = ?,?")) {
}

if (!$stmt->bind_param('si', $_GET['name'], $_GET['name'])); {
    echo "Binding parameters failed: (" . $stmt->error . ") " . $stmt->error;
}

if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->error . ") " . $stmt->error;
}

if (!$stmt->fetch()); {
    echo "Binding parameters failed: (" . $stmt->error . ") " . $stmt->error;
}

$stmt->close();
?>
4

3 に答える 3

0

すべての GET 入力を保護したい場合、これはより良い解決策です:

function GET($name=NULL, $value=false)
{
    $content=(!empty($_GET[$name]) ? trim($_GET[$name]) : (!empty($value) && !is_array($value) ? trim($value) : false));
    if(is_numeric($content))
        return preg_replace("@([^0-9])@Ui", "", $content);
    else if(is_bool($content))
        return ($content?true:false);
    else if(is_float($content))
        return preg_replace("@([^0-9\,\.\+\-])@Ui", "", $content);
    else if(is_string($content))
    {
        if(filter_var ($content, FILTER_VALIDATE_URL))
            return $content;
        else if(filter_var ($content, FILTER_VALIDATE_EMAIL))
            return $content;
        else if(filter_var ($content, FILTER_VALIDATE_IP))
            return $content;
        else if(filter_var ($content, FILTER_VALIDATE_FLOAT))
            return $content;
        else
            return preg_replace("@([^a-zA-Z0-9\+\-\_\*\@\$\!\;\.\?\#\:\=\%\/\ ]+)@Ui", "", $content);
    }
    else false;
}

代わりに $_GET['something'] GET('something') を使用し、GET 値が存在しない場合はデフォルト値を設定するオプションがあります。また、MySQL クエリでは、エスケープ文字列または準備された状態を使用して、クエリを完全に保護できます。

于 2014-10-10T13:16:45.087 に答える