-2

私は目が赤くなるまで、dbインジェクション、フォーラム検索、名前のない検索検索について読んだことがあります....だから、率直な質問です。私はjquery/ajaxを使用しています。

var characterReg = /^([0-9a-zA-NP-Z]{27,34})$/;

基本的な形式の検証のみ。それがphpに渡されます。結果を DB クエリで使用しても安全ですか? 私は実際のビットコインアドレスの検証を探しているのではなく、基本的な形式だけを探しています.

<?php
include('myConnect.php');
$expire = time() + 60 * 60 * 24 * 30;
$path   = '/';
if (isset($address)) {
    // Query db if address exsists.
    $data = mysql_query("SELECT * FROM viewers WHERE address = '$address'");
    $info = mysql_fetch_array($data);
    if ($info) {
        // Build cookie data from db row array.
        $bitAdrr = $info['address'];
        $id    = $info['id'];
        $earn  = $info['earnings'];
        $track = $info['tracking'];
        setcookie('user', $bitAdrr . ',' . $id . ',' . $earn . ',' . $track, $expire);
    } else {
        echo 'empty';
    }
}
?>

myConnect.php

<?php
$addr = $_GET['address'];
// Verify address is correct format.
if (strlen($addr) > 26 && strlen($addr) < 35 && !preg_match('/[^A-NP-Za-z0-9]/', $addr)) {
    $server = 'mysql.myHost.com';
    $user   = 'myUserName';
    $pass   = 'myPassWord';
    $db     = 'myDataBase';
    // Connect to Database
    $connection = mysql_connect($server, $user, $pass) or die("Could not connect to server. \n" . mysql_error());
    mysql_select_db($db) or die("Could not connect to database. \n" . mysql_error());
    $address = $addr;
} else {
    exit;
}
?>

注射の可能性は?mysql_real_escape_string(htmlspecialchars は本当に遅いようです。

4

1 に答える 1

0

最善の答えは、準備済みステートメントを使用することです。これにより、データベース エンジンは正しいエスケープについて心配することができます。

詳細は PHP のマニュアルに記載されていますが、要約すると、変数の疑問符のプレースホルダーを使用してステートメントのテンプレートを用意することで、最初に準備を整えることができます。

$stmt = $mysqli->prepare("SELECT * FROM viewers WHERE address = ?")

次に、置換するパラメーターを指定できます。

$stmt->bind_param("s", $address)

そして最後にそれを実行します:

$stmt->execute();

注意すべきもう 1 つの側面は、サーバー側 (PHP) ではなく、クライアント側 (JavaScript) で検証を行おうとしているように見えることです。すべてのリクエストがページで実行されているコードからのものであることを検証できないため、これは安全ではありません。コードはブラウザで実行されるため、コードを実行しないことを選択するだけで、好きなアドレス値でリクエストをサーバーに直接送信できます。サーバー側で常にデータ検証を実装します。

于 2013-03-18T03:32:32.377 に答える