特殊文字とセキュリティ

 一般にWebアプリでは、' や < などの特殊文字を悪用してデータベースを見たり(SQLインジェクション)他のサイトに誘導(クロスサイト・スクリプト)させたりすることもできます。

 XCuteは、データベースとの接続にSQL文を使っています。Filterコマンドは、Where句に追加されますが、区切り文字を付加するなどの安全性を考慮した内部操作をXCuteが全て行います。開発者は特に注意せず使用できます。
しかし、Filter()CHG_SQLでは、内部操作は一切行いません。区切り文字を付けたり、検索文字列に「'」がデータとしてある場合は「''」(区切り文字2つ)に置換することも必要です。要は、Filter()とCHG_SQLは使い方を誤ると、セキュリティホールが発生することに注意してください。

 <,>,&,"らの特殊文字を、データとしてブラウザに表示させるには、それぞれ、&lt;,&gt;,&amp;,&quot; に変換することがセキュリティ上必要です。これを怠ると、いわゆるクロスサイト・スクリプトという攻撃を許すことになります。
XCuteでは、入力規則などを使う場合は、この特殊文字の変換は内部的に行われ安全です。
しかし、自分でタグ差込を使ってインプットボックスなどのタグを作成した場合には、この特殊文字の変換は自動では行われませんので、開発者自らが行ってください。

また、テンプレート機能のテンプレートHTMLファイルの_RyCx_文字は、Excelのセルの値で置き換えられますが、このテンプレート機能で特殊文字の変換を行わせる場合には、_RyCx__RyCx_LTGTとしてください。

本件の詳細は、弊社のホームページのドキュメントの「特殊文字とセキュリティ」にありますので、参照願います。要は、差込タグを使ったインプットボックスやFilter()あるいはChg_Sqlを使う場合は、それなりの注意が必要なのです。

 特殊文字に関連したセキュリティを確保するための簡便法も提供されています。Proles.ini ファイルの[CGI]セクションにはNoSetChar='<>の記述があり、Setコマンド'<>なるキャラクターを許可しないという意味です。要は、外部から'<>のキャラクターの侵入を防ぐ訳で、Webブラウザからこれらのキャラクターは使用できない弊害もありますが、セキュリティは確保されます。
開発者がプロで無い限り、proles.ini NoSetCharを出荷時の状態で使うことを強くお勧めします。

 もし、NoSetCharを使わず、自分で対処するなら、ProLesWeb.xlsのSanitizingという関数が用意されているので利用してください。 =ProLesWeb.xls!sanitizing(RC[1])とすると、利用できます。
 また、Proles.ini ファイルの[CGI]セクションSetCommandlevelを設定することもセキュリティ上有効です。受け取る値をきちんと管理し、評価してから利用することは、安全確保のため、必要なことです。

参照
 ○
Filterコマンド
 ○CHG_SQLコマンド