1

ここで少し初心者の質問...

テーブル行のリストに JavaScript 関数があります

<tr onclick="ClosePopup('{ScenarioID}', '{Name}');" />

ただし、{Name} 値には文字"'"(一重引用符) が含まれる場合があります。現時点では、結果としてエラーExpected: ')'が発生します。これは、javascript 関数を効果的に早期に終了させ、構文を破壊しているためです。

{Name} 値の一重引用符が JavaScript に影響を与えないようにする最善の方法は何ですか?

乾杯!

4

4 に答える 4

6

テンプレートにレンダリングされる値のコンテンツをエスケープしないという、安全でない Web テンプレート プログラミングの最初の大罪を犯しています。このアプローチを採用すると、Web アプリが XSS (クロス サイト スクリプティング) に対して脆弱になり、サード パーティがページでカスタム JavaScript を実行して、ユーザー データを盗み、彼らが望むように大混乱を引き起こす可能性があることはほぼ保証できます。

見てみな。http://en.wikipedia.org/wiki/Cross-site_scripting

解決策は、コンテンツをエスケープすることです。また、html の内部にもある JavaScript でこれを適切に行うには、単にバックスラッシュの前にエスケープ シーケンスを配置するだけでは不十分です。

まともなテンプレート エンジンは、テンプレートに書き込まれたコンテンツをエスケープする方法を提供するはずです。データベースの値はそのままにしておくことができます。重要な部分は、出力時にエスケープすることです。テンプレート エンジンまたは動的 Web アプリ フレームワークでこれが許可されていない場合は、許可されているものに変更してください。:)

于 2009-09-22T01:54:29.923 に答える
1

以前のコメントを支持して、以下を読んで、セキュリティに関するアドバイスが非常に重要である理由をよりよく理解してください。

http://eval.symantec.com/mktginfo/enterprise/white_papers/b-whitepaper_web_based_attacks_03-2009.en-us.pdf

于 2009-09-22T02:13:16.970 に答える
0

誰もが提供するセキュリティ情報は非常に貴重ですが、この場合はすべてクライアント側であるため、この状況ではあまり関係がありませんでした。データを取得してXMLをレンダリングするときにセキュリティ対策が適用されます。このページはWindows認証(管理セクションのみ)によっても保護されており、Webアプリのフレームワークを変更することはできません。私が探していた答えは、結局は非常に単純でした。

<tr onclick='ClosePopup("{ScenarioID}", "{Name}");' />
于 2009-09-22T03:31:44.300 に答える
0

たとえば、次のように置き換えることで、ほぼすべてのコードインジェクションを殺すことができると思います

"Hello"

String.fromCharCode(72,101,108,108,111)
于 2009-09-22T02:14:03.523 に答える