2011-08-14 9 views
1

私は最も簡単な作業で問題があります。 htmlページには、jqueryで$ .get()を使用してデータをPHPファイルに送る単一のtextareaタグがあります。php投稿を安全にする

そこから、htmlspecialcharsからaddslashesまでさまざまな方法を使用します。 しかし、1つの\が改行の後ろに残っているかどうかでエラーを投げ捨てるか、改行を保存しないかは、何もするべきではありません。

テキストエリアの値をPHPファイルに渡して、それを注入証明とjson互換にするにはどうすればよいですか? 私はmysqlでアクセスし、$ .formatJSON()を使って書式を設定します。それは問題なく動作し、すべての改行文字を保持しますか?

//php 

$result = htmlspecialchars($_GET["message"]); 

mysql_query("INSERT INTO table (message) VALUES ($result)"); 


//jquery 
$.ajax({ 
url:("http://websitename.com/post.php?message=" + message + "&callback=?"), 
dataType: 'JSONP', 
success:function(json){ 
    callback($.parseJSON(json)); 
}, 
error:function(){ 
}, 
}); 
+0

これが実際のコードの場合、SQLは間違っています。挿入しようとしている文字列に一重引用符を追加する必要があります。 'mysql_query(" INSERT INTO table(message)VALUES( '** '**' $ result' **' ** ')");そして挿入する前に文字列をエスケープします。 – dakdad

+0

それは正しいものを保持しながら、厄介な文字をエスケープすることができる点です。また、PHPコードも単なる例です。 – Drake

+0

[大脱走(または:テキスト内でテキストを扱うために必要なこと)](http://kunststube.net/escapism/)をお勧めしますか? – deceze

答えて

2

MySQLクエリで値を使用する前に、mysql_real_escape_stringを使用してください。さらに、$resultを一重引用符で囲んで($result)に入れる必要があります。

+1

downvoter:私のポストの有用性の欠如の理由がコメントで説明されたなら、私はそれを感謝したいと思います。 –

3

現在、prepared statementsを使用することをお勧めします。このようにして、SQLインジェクションは問題外です。これがコードをプロファイリングした後に遅すぎると判明した場合は、mysql_(real_)escape_stringの使用に頼るべきです。

セキュリティのもう一つのステップとして、別のセキュリティレイヤーを追加するためにPHPIDSのような侵入検知システムをインストールすることができます。

addslashesなどは使用しないでください.SQLクエリのユーザー入力をエスケープするためのものではありません。

また、あなたのケースでは、テキストエリアコンテンツをGET経由で渡すのではなく、jQuery documentationに記載されているPOST経由で渡すべきです。さらに、dataTypeは 'json'でなければならず、後で解析する必要はありません。 jQueryのPHPからJSONを取得する例はhereです。

+0

私はphpidsまたは類似のものをお勧めしません。彼らができるのは、リクエスト*が潜在的な悪のように見える場合にのみ**推測することです。あなたが安全だと考えると、巨大な脆弱性や誤ったアラームを得ることができます。準備されたステートメントを使って慎重に書くことはそれほど難しくありません。 +1 – zerkms

関連する問題