2010-12-28 4 views
3

私はTextがPOSTテキストエリアであると言います。その分野で私は何を書いてもいいと思う。 XSS、SQL、およびその他の最終的な不良コードなど。マークアップではBBCodeを使用しますので、コードを表示せずに表示したいと考えています。
もちろん、私が避けたいのは、DBが壊れてしまうことです! 非常に安全これを行う方法はありますか?データベースに書き込まなければならない入力を保護する手順は?

私が実際に行う手順は次のとおりです。

  1. には、Content-Typeと文字セットを指定しContent-Type: text/html; charset=UTF-8

  2. リミット入力。 Ex.: Max 500 characters

  3. 使用にhtmlentities()$GoodText = htmlentities($Text, ENT_QUOTES, "UTF-8");

  4. mysql_real_escape_stringの使用()$GoodText = mysql_real_escape_string($GoodText);

  5. ストアそれ私の知る限りは、ステップ3を読み、4であるとしてDB $db->store($User, $GoodText);

で全く同じですが、私は説明をしたいと思います。

とにかく、これは動作する方法ですか?
POSTフォームにもトークンを使用する必要がありますか?あなたのための

答えて

1

クイック概要:クロスサイトリクエスト 偽造に対する

  • 使用トークン。

  • クロスサイトスクリプティング攻撃に対してhtmlspecialchars/entitiesを使用します。

  • SQLインジェクションに対してmysql_real_escape_stringを使用してください。

データベースセキュリティでは、mysql_real_escape_string関数を使用してエスケープするだけで済みます。

+0

これは簡単ですか?ちょうどmysql_real_escape_string? – eij

+1

@eij:後でやることを忘れるまで、今は簡単です。 –

+0

mysql_real_escape_stringで十分ではありません:http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html –

0

私は基本的にステップ3と4を組み合わせたこの機能を使用します。それは一次元の配列と文字列で動作します。

function escape($mixed){ 
    if(is_array($mixed)){ 
     foreach($mixed as $m => $value){ 
      $mixed[$m] = mysql_real_escape_string(htmlspecialchars($value, ENT_QUOTES, "UTF-8")); 
     } 
    }else{ 
     $mixed = mysql_real_escape_string(htmlspecialchars($mixed, ENT_QUOTES, "UTF-8")); 
    } 
return $mixed; 
} 
+0

うん、私はすでにそのようなものを作っています:) – eij

関連する問題