外部からの入力に関するTIPS。

ユーザ名の入力、他ゴーストへ切り替えを行う時に相手の名前を呼ぶなど、~
どんな文字が来るか分からない場合、対策しておかないと危険な場合があります。~

----
#contents
----
~
*何がおこるのか [#i881d68d]
ユーザ名を入力してもらって、以降その名前で呼ぶとします。~
このときユーザ名に「[[\![vanishbymyself]:http://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#_!_vanishbymyself_]]」と入力されたりするかもしれません。~
\![vanishbymyself]は、その場で自分自身をアンインストールするさくらスクリプトです。~
もしこの入力をそのままユーザ名に設定してしまうと、~
今後ゴーストがユーザ名を呼ぶたびに自分自身をアンインストールするという非常に困った事態になってしまいます。~
他にも、外部サイトから情報を取得する「[[\![execute,http-get,URL]:http://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#_!_execute,http-get,URL_]]」なども危険です。~
外部入力による予期せぬ動作を防ぐ必要があります。~

*対策 [#q5928c07]

外部入力からのさくらスクリプトを無効化する必要があります。~

**KillDangerousTag関数 [#d694c7c7]
里々のサンプルゴーストである「[[Rポストと狛犬:http://emily.shillest.net/specwiki/index.php?Wiz%E2%98%85%2F%EF%BC%B2%E3%83%9D%E3%82%B9%E3%83%88%E3%81%A8%E7%8B%9B%E7%8A%AC]]」には、既に便利な機能が入っています。~
基本的に自分の辞書からでない文字列は、これを使えば安全です。~
dic00_system.txtに記述されているので、活用しましょう。~

 *
 :(call(バイト値、1)KillDangerousTag(バイト値、1)\![vanishbymyself]を実行するぞ!)

このように記述すると、\![vanishbymyself]は実行されず、バルーンに以下のように出力されます。~

 \![vanishbymyself]を実行するぞ!

**\_?を使う(SSP専用) [#xb586e04]
[[\_?:http://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#__?]]で挟まれた範囲のさくらスクリプトは実行されず、そのまま表示されます。

 *
 :もうゴーストやめてやるー! \_?\![vanishbymyself]\_?

出力結果は以下となります。

 もうゴーストやめてやるー! \![vanishbymyself]

注意点として、\_?はSSPにしか実装されていません。~
この方法を使う場合、配布ページやreadmeに、SSPでしか動作しないことを記述しておく必要があります。

**自分で置き換え処理を作る [#c5ea7412]
上記のKillDangerousTag関数を使うのが一番簡単ですが、自分で対策を作ることも可能です。~
半角\記号はさくらスクリプトで使われるため、ただ「\」と書いてもバルーンに表示されません。~
半角\記号をバルーンに表示するには、「\\」と表示します。~
また、\\と書いた場合にはさくらスクリプトとして解釈されません。~

 *
 :メガンテ! \\![vanishbymyself]!

このように書いた場合、バルーンには以下のように表示され、\![vanishbymyself]は実行されません。~

 メガンテ! \![vanishbymyself]!

全ての半角\記号を「\\」と置き換えてしまう処理を作ります。~

 @さくらスクリプト無効化
 (replace(バイト値、1)(A0)(バイト値、1)\(バイト値、1)\\)

使い方は以下です。~

 *
 :(call、さくらスクリプト無効化、\![vanishbymyself]も\![execute,http-get,URL]もぜんぶ無効化だ!)

出力結果は以下となります。~

 \![vanishbymyself]も\![execute,http-get,URL]もぜんぶ無効化だ!

*使うべき場所 [#j43cdb2c]

基本的に、辞書に書いている部分には使用する必要はありません。~
外部から入力された文字列など、何が入っているか分からない部分に使用します。~
以下に例を挙げます。~

-ユーザ入力
-他ゴースト名
-他ゴースト\0名

ユーザ入力は「Rポストと狛犬」で対策済みなので、ここではゴースト切り替え時の対策を記述します。~

**ゴースト切り替え反応 [#v9ee80f0]
普通は以下のように記述しますが、もし\![vanishbymyself]なんて名前のゴーストが発表された場合に困ります。~

 *他のゴーストへ変更
 >(R0)へ変更
 :(R0)さんに交代します。

そこで、先ほどのKillDangerousTag関数を使用して書き換えます。~

 *他のゴーストへ変更
 >(R0)へ変更
 :(call(バイト値、1)KillDangerousTag(バイト値、1)(R0))さんに交代します。

または、\_?でさくらスクリプトを無効化しておきます。~
前述のとおり、この記述はSSP専用です。

 *他のゴーストへ変更
 >(R0)へ変更
 :\_?(R0)\_?さんに交代します。

**補足 [#f9384eb2]
なお、以下はきちんと動作し、さくらスクリプトは実行されません。~

 *
 >\![vanishbymyself]
 
 *\![vanishbymyself]
 消えないでトークをするよ!

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS