Joomla!のエクステンションで$_SERVER['REQUEST_URI']をそのまま使っているエクステンションを見かけたので問い合わせから連絡しておいた。私も恥ずかしいこといっぱいしているのでお構いなしです。![]()
なぜ、そのまま使ってはいけないのかは「REQUEST_URI クロスサイトスクリプティング」ででも検索したら出てくるので書きませんが、mod_QRcodeを作成時に自動でURLを作成できるようにしようと思ったのですが、断念した覚えがあります。Joomla!1.5では使えそうなメソッドが用意されていますが、1.0.xでは自分が開いているサイトのURIを知ることは非常に難しいです。(もちろん、スクリプト付きでも良いなら別ですよ。)Joomla!標準のエクステンションだけならやりようもあるでしょうが、サードパーティーのエクステンションをもカバーしようと思うとはっきり言って至難の業です。$_SERVER['REQUEST_URI']ってユーザーがリクエストしたそのままが得られるだけなのでスクリプトがくっついていようが、SQLインジェクションをねらったクエリが付いていようがおかまいなしです。
簡単な例:Joomla!1.5で例えば下記のようなURLが正しいURLとすると
http://demo.joomler.net/the-news/1-latest-news/86-example-go.html
以下だとどうでしょう・・・
http://demo.joomler.net/the-news/1-latest-news/9999999999999999999/86-example-go.html
のように異なるURLでも同じページにアクセスできてしまいます。この場合はクエリの間に数字を入れただけですが、このように正しいURLでは無くても該当ページにアクセスできます。
なので、そのREQUEST_URIを使ってブックマークなんてとんでもないですよね。
サニタイズしてクリーニングすればと思うかもしれない。でもそれが本当に、そのサイトの管理者が意図するJoomla!の正しいURIってわかりますか?(もちろん使っているエクステンションが限定されていればそれ相応にサニタイズできると思います。)
Joomla!1.5で用意されているメソッドを使っても上記の例のような場合はそのまま出力されてしまいます。
結果、mod_QRcodeでは、モジュールのコピーを可能にして個々にURLの指定をするようにしましたので外部のリクエストに左右されません。
私も気をつけようっと・・・。![]()
Joomla!1.5では、英語タイトルなら自動でタイトルを付加したSEF-URLにしてくれるのですが、日本語だと番号だけになってしまいます。真偽は定かではありませんが、日本語でもURLエンコードされたものを使ったURLがSEFとして効果があるらしい。本当かどうかは知りません。
ちなみにどんなURLになるかというと
http://example.com/demo/the-news/1-latest-news/46-%E3%81
%95%E3%81%82%E3%81%A9%E3%81%86%E3%81%A7
%E3%81%97%E3%82%87%E3%81%86
とこんな風に長いURLになるわけです。ブラウザでそのリンクをポイントすると
という風に見えます。
ということでまた、書き換えちゃいました。
SEF、mod_rewrite、suffixをオンにするとJoomla!1.5では、1.0.xと異なり
http://demo.joomler.net/the-news/1-latest-news/
49-scribefire-test.html
などとかなりわかりやすいURLにしてくれます。1.0.xではここ80codeサーバーでは問題なく動作しています。ところが、1.5では簡単にはできませんでした。
RewriteBase /
をアンコメントしないと500エラーでこのサーバーでは動きません。それは、1.0.xでも同じです。が、1.5では一番上位の階層なら表示できますが2階層目以降は、404エラーとなってしまいます。対応策をかなり調べたつもりですが適当なドキュメントを見つけられませんでした。 どなたかご存じなら教えてください。
Hack
そこでへこたれず・・・コアを編集してしまいました。・・・5文字追加しただけです。今テスト中ですので大丈夫そうなら書きます。とりあえず表示する分には大丈夫なようです。
今度は日本語SEFをテストしてみるつもりです。