-1

免責事項:機能が TO-DO-DEPRECATION リストの一番上にあることを理解しています。すべての警告は聖歌隊に説教するだけです。

とりあえず。mysql_* 関数を使用する会社に就職しました。mysql_real_escape_string()全体に「素晴らしい」がないので、それは明らかに十分に悪いことではありません。すべてのユーザー入力はサニタイズされていないため、当然のことながら新しいコード モンキーなので、私の仕事はそれをすべての 4.93g の php スクリプトに組み込むことです。FML 「だから」、「$_REQUEST各ページで配列を設定解除したらどうなるか (理由はわかりませんが、プログラム全体で一度も使用されていないか、$_POST文字通り$_GETすべての$_REQUEST場所で使用されていました。) でそれをリセットしたらどうなるmysql_real_escape_stringでしょうか?」. 私にとって、それは確かに 1000000000 行のコードを実行するよりも優れています。だから私は座って、それを行う関数を書きました。これが私がいる場所です:

/*lets say input is dirty and input2 is boy*/

    echo "<br><pre>";print_r($_REQUEST);echo "</pre><br>";

$tempString = implode(',', $_REQUEST);
$tempString2 = implode(',', array_keys($_REQUEST));
$tempArray = explode(',', $tempString);
$tempArray2 = explode(',', $tempString2);
$count = count($_REQUEST);
    echo "<br><pre>";print_r($tempArray);echo "</pre><br>";

    echo "<br>";
    echo "<br><pre>";print_r($tempArray2);echo "</pre><br>";

unset($_REQUEST);
   $_REQUEST = array();
   for($i = 0; $i < $count; $i++){
       $_REQUEST[$tempArray2[$i]] = "mysql_real_escape_string(".$tempArray[$i].")";
   }

    echo "<br><pre>";print_r($_REQUEST);echo "</pre><br>";

私が知る限り、それは機能しています!:

Array
(
    [input] => dirty
    [input2] => boy
)


Array
(
    [0] => dirty
    [1] => boy
)



Array
(
    [0] => input
    [1] => input2
)


Array
(
    [input] => mysql_real_escape_string(dirty)
    [input2] => mysql_real_escape_string(boy)
)

しかし、率直に言って、それは簡単すぎるようです。私が目にする差し迫った問題は

  1. それはのためにのみ機能します$_REQUEST[]
  2. グローバル関数として設定して含める場合でも、すべてのページの上部にハードコーディングする必要があります
  3. 1つでもうまくいかない場合...
  4. mysql_* 関数は ie を吸うmysql_real_escape_string

余談ですが、PDO からすべてを切り替えるのに何回戦ったかわかりません。

それで

私がこれをあなたたちにここに持ってきたのは、2番目の目のためだと思います. これに関して差し迫った問題はありますか?私が見逃した他の差し迫った問題はありますか?とにかく、これが好きなら、このようなものを使用できる他の人がいると確信しているので(あなたがそれを構築すれば、彼らは来るでしょう)、先に進んでgithubでそれを調べて、私のスケジュールに組み込んでください、ありがとう: )

4

2 に答える 2

2

まず、あなたが今していることは意味がありません。文字通り、mysql_real_escape_string(...)ユーザー入力を言葉で囲んでいますが、これはまったく無意味です。これは SQL インジェクションから保護するものではなく、単語mysql_real_escape_stringが入力全体に表示されることを意味します。

代わりにすべてのユーザー入力を呼び出す と、 の不完全なレプリカになり、それに伴うすべての問題が発生します。特に、ユーザー入力を SQL に直接渡さないコード (またはそれ自体を適切に使用するコード) は、SQL エスケープされたテキストを表示することになります (たとえば、いたるところに)。mysql_real_escape_string()magic_quotesmysql_real_escape_string\'

コードを実際に調べて、ユーザー入力を適切にエスケープするために再加工する以外に、実際の代替手段はありません。ただし、実際に 4.93 GB の PHP を使用する場合は、別の何かがひどく間違っています。アプリケーションはそれほど大きくないはずです。そのサイズのコードベースを維持することはまったく不可能であり、おそらく完全にやり直す (または新しい仕事を見つける) のが最善でしょう。

于 2013-02-26T19:03:06.917 に答える
1

mysql_real_escape_string の自動挿入があってはなりません。限目。

「mysql_real_escape_string でデータをリセットする」というのは、「SQL インジェクションからデータを保護する」という意味ではありません。どうにかして。

あなたが実際にやろうとしているのは、長い間軽蔑され、廃止され、すでに削除された魔法の引用符機能を復活させることです。
理由を考えてみてください。
その理由の 1 つは、シリアル エスケープが SQL インジェクションの確実な方法であるということでした。

1つだけメモ。

mysql_* 関数は吸う、つまり mysql_real_escape_string

このステートメントは真実ではありません。
この正直な機能は大丈夫です。
それを不適切に使用しているのはプログラマーであり、障害の責任があります。

于 2013-02-26T19:30:44.133 に答える