これは完全に安全ですか
そうかもしれないし、そうじゃないかもしれない。今のところ、安全性を無視して、別の角度からこの問題に取り組みます...
URL エンコーディングは目的を果たします。パーセント エンコーディング(実際の名前) は URL です。「urlエンコーディング」が<space width='1'>
実際のスペースの代わりにすべてのスペースを置き換える%20
か、それが今何をしているのか想像してみてください。URL " ...?q=foo bar
" は、架空の例では " ...?q=foo<space width='1'>bar
" になり、正しく "URL エンコードされた" URL になります。これは、PDF や CSV ファイル、またはその他の種類の出力を作成する場合に便利ですが、HTML では問題が発生します。あなたの場合、属性を'
「終了」させてゴミとして残すためです。href
1'>
<a href='https://example.com/search?q=foo<space width='1'>'>
出力は HTML を対象としているため、実際には、少なくとも私見ではHTMLEncode(URLEncode(MyUrl))
(疑似コード) を実行する必要があります。
これを覚えておいてください:エスケープは常に特定のコンテキスト内で行われます。SQLの場合、SQLインジェクションの脆弱性を回避するために、引用符などをエスケープするために「mysql_real_escape」に似たものが必要です。HTML では"
や<
のような文字をエスケープする必要があります。RTF ファイルでは (実際にはわかりません) のような他の文字列/文字をエスケープする必要があり\
、 CSV ファイルではエスケープする\\
必要があります。フィールド値内および JSON 出力では、 を含む文字列をとしてエスケープする必要があります。各タイプの出力 (フォーマット) には、独自のエスケープ/エンコーディングが必要です。,
;
"
\"
あなたが今行っているのは「コンテキストのネスト」です。「URL コンテキスト」を「HTML コンテキスト」にネストしています。したがって、それに応じてエスケープ/エンコードする必要があります。
TrueBlue が示すように、安全ではありません。