私のWebアプリケーションでは、ユーザーが検索を実行しているときに、freeTextパラメーターにJavaScriptを挿入できないようにしようとしています。
これを行うには、ヘッダーVelocityファイルにコードを記述して、クエリ文字列にfreeTextというパラメーターが含まれているかどうかを確認します。含まれている場合は、replaceメソッドを使用してパラメーター値内の文字を置き換えます。ただし、ページを読み込んでも、元のクエリ文字列が表示されます。元のクエリ文字列を、文字が置き換えられた新しいクエリ文字列に置き換える方法がわかりません。
これは私のコードです:
#set($freeTextParameter = "$request.getParameter('freeText')")
freeTextParameter: $freeTextParameter
#if($freeTextParameter)
##Do the replacement:
#set($replacedQueryString = "$freeTextParameter.replace('confirm','replaced')")
replacedQueryString after doing the replace: $replacedQueryString
The query string now: $request.getQueryString()
The freeText parameter now: $request.getParameter('freeText')
#end
上記のコードでは、replacedQueryString変数が期待どおりに変更されています(つまり、置換は期待どおりに実行されています)が、$ request.getQueryString()と$ request.getParameter( 'freeText')は以前と同じです。交換が行われたことがない場合。
パラメータを取得するために正常に機能するrequest.getParameterメソッドがあるので、同じことを逆に行うrequest.setParameterメソッドがあると思いましたが、ありません。
私は自分で問題を修正することができました-$!request.getParameter( 'freeText') "変数が使用されている別のファイル(すべてのページで呼び出される)があることが判明しました。そのファイルを更新して、既存の「$!request.getParameter( 'freeText')」変数の代わりに、新しい$!replacedQueryString変数(つまり、JavaScriptが削除された変数)を使用します。これにより、JavaScriptがすべてのページで実行されなくなります。
したがって、これはヘッダーVelocityファイルの最終的な作業コードです。
#set($freeTextParameter = "$!m.request.httpRequest.getParameter('freeText')")
#if($freeTextParameter)
#set($replacedQueryString = "$freeTextParameter.replace('confirm','').replace('<','').replace('>','').replace('(','').replace(')','').replace(';','').replace('/','').replace('\"','').replace('&','').replace('+','').replace('script','').replace('prompt','').replace('*','').replace('.','')")
#end
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加