1

コードを実行すると、次の 2 つのエラーが発生します。

mysql_num_rows() は、パラメーター 1 がリソース、ブール値であると想定します

これは、ファイルのまれな行で発生します。それらの残りの部分は問題なく動作します。

SQL 構文にエラーがあります。1 行目の「t」付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

はい、その脆弱性、わかりました。おそらくいくつかの奇妙な文字が問題を構成していますが、単語をデータベースに保存してmd5ingするため、実際に編集できます。

スラッシュmysql_real_escape_stringを追加すると、別の md5 値が得られると思います。では、どうすればデータを編集せずに同時にスクリプトを保護できるのでしょうか?

require ("dbconnect.php");
$list = fopen("huge.txt","r");
//convert and save to db
while(!feof($list))
  {
  $word = fgets($list);

  //check if already in db.
  $check = mysql_query("SELECT id FROM `database` WHERE word='$word'") or 
  die(mysql_error());
  if (mysql_num_rows($check)==0)
     {
     //rest of the codes

die()何が悪いのかを確認するためだけに追加しました。

4

1 に答える 1

1

質問1の場合、データベース接続が1つしかない場合は、mysql_num_rows()に引数を渡さないでください。

質問2の場合、エスケープされたバージョンは、データベースに保存されてからデータベースから再度プルされている限り、別のハッシュを生成しないようにする必要があります。エスケープされた文字列がデータベースに保存されると、保存されたバージョンは事実上エスケープ文字を失います。これが、たとえば、データベースからエスケープされた値をプルするときに「they\'re」が表示されない理由です。

基本的に、最初にハッシュを作成するときは、ハッシュ入力にエスケープされていないバージョンの文字列を使用してから、データベースに保存できるプレーンテキストバージョンをエスケープする必要があります。その後、いつでもデータベースからプレーンテキストバージョンをプルして再ハッシュすることができ、一致するハッシュ値が作成されます。

于 2012-03-26T17:27:27.530 に答える