2017-11-10 9 views
0

こんにちは私はこれを投稿する前に検索を使いました。ストリップ。テキストボックスから

私はphp/mysqlに新しいがsoooo多くの読書をしています。いくつかの友達が遊んでいるゲームを作ることができました。そのようなpvpゲーム。

とにかくプレイしている人のうちの1人が、購入単位を購入し売りに行く方法を見つけました。値の前に私は違法な文字を取り除くための保護機能を持っています

function protect($string) { 
    return mysql_real_escape_string(strip_tags(addslashes($string))); 
} 

これは他の文字には有効ですが、ではありません。私のためにそれをする人を頼むのではなく、ちょうど正しい方向を指し示したいと思っていました。

ちょうど包む誰かがここで尋ね、誰もが私の手を与えることができる場合、私は非常に感謝します

if(isset($_POST['buy'])){ 
     $sword = protect($_POST['sword']); 
     $shield = protect($_POST['shield']); 
     $gold_needed = (10 * $sword) + (10 * $shield); 

     if($sword < 0 || $shield < 0){ 
      output("You must buy a positive number of weapons!"); 
     }elseif($stats['gold'] < $gold_needed){ 
      output("You do not have enough gold!"); 
     }else{ 
      $weapon['sword'] += $sword; 
      $weapon['shield'] += $shield; 

      $update_weapons = mysql_query("UPDATE `weapon` SET 
              `sword`='".$weapon['sword']."', 
              `shield`='".$weapon['shield']."' 
              WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error()); 
      $stats['gold'] -= $gold_needed; 
      $update_gold = mysql_query("UPDATE `stats` SET `gold`='".$stats['gold']."' 
             WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error()); 
      include("update_stats.php"); 
      output("You have bought weapons!"); 
     } 

使用してコードイムある

私は何か、「文字列関数を見つけ、SUBSTR置き換えるとstrました「

を置き換えますが、1つのクエリで2つの関数を使用できますか?申し訳ありません新しい

EDITイム***

ここupdate_stats置くことによって単位を売買グリッチする方法を発見遊んで人々の

$update_stats = mysql_query("UPDATE `stats` SET 
          `income`='".$income."',`farming`='".$farming."', 
          `attack`='".$attack."',`defense`='".$defense."' 
          WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error()); 
+3

あなたは '.'がクエリにどのように影響するかを説明することができます(たとえば、どのような問題になり、クエリで、それが何を更新しませんか)?私が知る限り、mysqlには特別な意味はありません。また、 'addslashes' +' mysql_real_escape_string'はあなたにいくつかの奇妙なクエリを与えると思います。 PDOまたはmysqliの更新とパラメータ化されたクエリの使用を検討する必要があります。 – chris85

+0

このコードは使用しないでください。時間を無駄にしています。 –

答えて

-1

1に掲示クエリがあります。値の前に

まあ、脆弱性を正確には明らかにしていませんが、10進値を入力することで価格/数学の周りを回ることになるでしょうか?そう、可能性の数は、私は考えるべきですか?

if (substr($string, 0, 1) == ".") { 
    //return false, warn, etc. 
} 

あなたの「保護」機能に入る可能性があります。

同様に、あなたはINTVAL使用することができます()または(さえIS_NUMERIC)...ここで私はちょうど割り当てに追加します。

$sword = protect(intval($_POST['sword'])); 

また、正規表現と遊ぶことができます。私は$ valueを数値と仮定していますか?最大何桁ですか?私は5を使用しました:

if (preg_match("%\.\d{1,5}%", $sword)) { //this guy's playing w/us 
    die("Go away, bad hax0rz! :-P"); 
} 
+0

申し訳ありませんが、私は誰かが武器やユニットを購入し、ユニットを訓練し、リソースを削除しない例として.44444を入れていた場合、私はこの脆弱性が新しいと言ったようです。申し訳ありません –

+0

が、彼らは助けるべきである私の例を見てみましょう笑 http://prntscr.com/h8tiii また、いや、私は今ではmysqliのを理解するには、移動するための方法ですが、私はちょうど学び始めとMySQLは、私が学んだことです。 –

関連する問題