2016-10-15 8 views
0

さて、私は自分のウェブサイトでxssを修正しようとしていたので、すべて失敗しました。 「名前」と呼ばれる文字列は、人々は私はすでに socket.io/node.jsのXSSチャット?

name = name.replace(/(<|>)/g, ''); 

if(name.indexOf('<') !== -1){ 
return false; 
} 

私がやって管理されるすべての

を試してみました <script>alert("HahS");</script>のようなものに自分の名前を変更するwhitchであり、XSSを送信したユーザの修正XSSはあるが、すべてのためにそれを記録した他の人はまだポップアップします。

答えて

1

独自の正規表現を記述しないでください。 encodeURIComponent()を使用してください。これは、このようなユーザー入力から逃れるための適切な方法です。

const sanitized = encodeURIComponent(name); 

トリックは正しい場所でこれを行う必要があることです。 nameパラメータが他のクライアントにブロードキャストされている場合、エスケープする場所を決定する必要があります。一般に、にレンダリングされる前に、またはエスケープされないと危険な方法で使用される前に、これを行うのが最善です。

これが意味:

  1. は、クライアント上ではなく、サーバー上でそれを行います。
  2. 潜在的な悪意のあるユーザーが自分の名前を送信するのではなく、クライアントが初期化/レンダリングを実行するときに実行します。右の場所がどこにある考え出す苦労している場合は、nameを使用して(あなたがそれを取り除くことができる場所を見つけ出す)逆方向に動作し、どこでも

、ちょうどencodeURIComponent()を追加します。まもなくnameがダブルエスケープされることになります。しかし、それはほとんどの無実の値がnameで大丈夫です。これは、XSS攻撃に開放されているよりも良いデフォルトです。

詳細:

+0

私はどこにでも、私は名前を使用encodeURIComponentで()を追加することに苦労していますが、一例が "bet.name" で、もし私はそれを "bet.encodeURIComponent(name)"に変更します。サイトはまったく動作しません。 – Petras

+0

値が 'bet.name'に格納されている場合は、' encodeURIComponent(bet.name) 'を使う必要があります。それは動作しますか? –

+0

私はそれが動作すると思うが、その非常に悪い、さらにスペース "%20"が表示されます。それを改善する方法はありますか(<,>などを削除するだけです)? – Petras