PHP アプリケーションを保守しています。最近、次のコードが XSS に対して脆弱であると報告されました。
from_name = jQuery("#from_name").val();
from_email = jQuery("#from_email").val();
subject = jQuery("#subject").val();
msg = "From: " + from_name + " (" + from_email + ")<br />";
msg = msg + "Subject: " + subject;
jQuery("#review").html(msg);
彼の提案は次のとおりです。
from_name = jQuery("#from_name").val();
from_email = jQuery("#from_email").val();
subject = jQuery("#subject").val();
msg = "From: " + from_name.replace(/</g,"<").replace(/>/g,">") + " (" + from_email.replace(/</g,"<").replace(/>/g,">") + ")<br />";
msg = msg + "Subject: " + subject.replace(/</g,"<").replace(/>/g,">");
jQuery("#review").html(msg);
明らかでない場合、これは大幅に単純化されています。とにかく、彼の解決策は、.replace(/</g,"<").replace(/>/g,">")
私がすぐに問題を抱えていないが、A) 不要または B) 不完全であると思われる潜在的な要素をクリーンアップすることです。
.text
代わりに使用することを検討しまし.html
たが、テキストを適切にフォーマットできません。私が愚かなことを見落としていない限り。
元の要素が入力要素であるため、どのように脆弱であるかがわかりますが、これらの入力要素はデータベースから入力されます。データベースはもともと脆弱な $_POST を使用して入力されていましたが、すべての HTML タグを削除するなど、データベースにコミットする前にデータを検証しています。
私の意見では、XSS の唯一の可能性は、要素がユーザー (ばかげているように思われる) または JavaScript によって変更された場合、文字通りページ上にあります。関数は、悪意のある変更を取り除きます。
これは長ったらしい質問です。私の論理が合理的であることを願っています。