エスケープは出力時に
CGIプログラムは、HTMLを出力とすることが多い (というか殆ど) ため、入力データに対して HTML エスケープを施すものが多く見られます。
| 入力部 |
cgi =CGI::new() title =CGI::escapeHTML(cgi.params['title']) artist =CGI::escapeHTML(cgi.params['artist']) asin =CGI::escapeHTML(cgi.params['asin']) |
| 出力部 (eRuby) |
<table>
<tr>
<th>タイトル</th>
<td><%=title%></td>
</tr>
<tr>
<th>アーティスト</th>
<td><%=artist%></td>
</tr>
<tr>
<th>購入</th>
<td><a href="http://www.amazon.co.jp/dp/<%=asin%>">Amazon.co.jp<a></td>
</tr>
</table> |
| 実行結果 (HTML出力) |
<table>
<tr>
<th>タイトル</th>
<td>American McGee's "ALICE" (Original Music Score)</td>
</tr>
<tr>
<th>アーティスト</th>
<td>Chris Vrenna</td>
</tr>
<tr>
<th>購入</th>
<td><a href="http://www.amazon.co.jp/dp/B00005OB0J">Amazon.co.jp<a></td>
</tr>
</table> |
HTMLのタグや属性の記述に使用される <, >, &, " といった特殊文字をエスケープすることで、クロスサイトスクリプティングなどの不正な出力を防止しているわけです。
このような、入力時にエスケープ処理を施す手法は多くの書籍・サイトなどで紹介され、実際に公開されている Web アプリケーションにおいても広く用いられています。
しかしながら、この手法には大きな問題点があります。
