0

XSSの脆弱性について考えています!

私はウェブサイトを持っています。そこでは、ウェブサーバーとクライアントのすべてのデータがXHRを介して転送されます-JSONとブラウザのJavaScriptが残りを実行してサイトを表示します。

クライアントがデータを送信するとき、DB(PHP)に記録されるデータの前の私のコードは次のとおりです。

$string = trim($_POST['user_input']);
$string = strip_tags($string);
$string = mysql_real_escape_string($string);

サーバーがデータベースからデータを取得する場合、PHPコードは次のようになります。

$string = htmlspecialchars($db_value);

その後

header('Content-Type: application/json; charset=utf-8');
print json_encode($string);

これはXSSから私を守るのに十分ですか?

4

2 に答える 2

2

一般的な経験則として、ここでの他の答えは正しくありません。content-type に application/json を使用するといくつかの問題が解決しますが、多くのクライアントは JSON オブジェクトからデータを抽出してページに表示する傾向があります。これは古典的な攻撃につながります。

XSS を停止するための唯一の信頼できる方法 (信頼できると言うのは、絶対確実ではないからです) は、インバウンド ストリームのデータをサニタイズし (リクエストを完全に拒否する方がおそらくより適切な呼び出しです)、表示される可能性のあるすべての出力をエンコードすることです (つまり、 : ユーザーが変更できるものすべて)。

また、セキュリティ用に設計されていないメソッドは本質的に安全であるという考えを受け入れないでください (json_encode は XSS セキュリティ用ではなく、そのように使用すべきではありません)。X のために通常のセキュリティ プラクティスが不要であるという提案は、完全に無視されない限り、懐疑的に見られるべきです。

于 2015-04-24T16:19:41.423 に答える
1

それは本当に依存します。post json_encodeのコンテンツに$stringHTML エンティティが含まれており、ページ上で html として表示される場合、XSS に対して脆弱になります。そうでない場合 (application/jsonとにかく使用しているのでそうではありません)、 を使用する必要がないだけでなくhtmlspecialchars、JSON 経由で転送しようとしている生データが変更されるため、おそらく望ましくありません。

XSS は邪悪な人々の想像力によってのみ制限されるため、XSS に対して完全に無敵であるとは言いませんがheader('Content-Type: application/json;')、この場合はそれで十分な保護が提供されると言えます。

関係のないことですが、使用をやめてext/mysqlください。

于 2013-02-07T00:23:35.800 に答える