プロが教える店舗&オフィスのセキュリティ対策術

現在、ブログタイプのWEBアプリを開発中です。

主にPHPのプログラミング側がメインで、CSSはまだこれから勉強している段階です。

アプリ内で、ユーザーが自由にCSSを編集してデザインを変更できるようにしたいのですが、
その際に、セキュリティ上禁止すべき属性、文字列などあれば教えていただきたいと思い、質問させていただきました。

自分で調べたものについては、
@import や expression などが該当することはわかったのですが、まだ勉強不足ですので他にもいろいろあると思います。

どうかご教示いただけたらと思います。
よろしくお願いします。

A 回答 (6件)

URL() で外部のドメイン(サーバ)へのアクセスが出来れば、何でもアリになりますが・・・。


なにせサーバの設定次第・・・。CGIの起動も・・・。


>ブログタイプのWEBアプリ
拡張子はサーバの設定次第。
アプリで制御するなら・・・。
1.CSS等の完全更新禁止。不自由だけど安全。
2.CSSのパターン選択方式。不自由だけど安全。
3.CSS作成,更新ツールによる、機能選択方式。ほとんどホームページ作成ツールの様な・・・。
4.危険は覚悟で、自由更新。一応、”URL(”という文字列のみ入力禁止に・・・。とりあえず別ファイルのアクセスだけは回避できる。
5.別サーバへのアクセスを禁止する。絶対アドレスを禁止してみたり、ドメインを確認して特定のドメインのみ許可するとか・・・。


尚、ブラウザ自体にCSSに対するバグがあります。悪意はなくとも特定のブラウザで不適切な表示(動作)になる物もあります。意図的にバグ等を利用してブラウザを振り分けるという技術もあります・・・。

効果に対して、手間と利用者のデメリットが大きいと思いますが・・・。「ブログタイプのWEBアプリ」なら本文の方がもっと・・・。
結局、サーバの設定も絡んでくるので、下手に配慮したつもりになると、効果に対して過剰な制限となったり、抜け道があったり・・・。


むしろ、特定の機能のみ設定可能の選択式として、CSSを更新可能にするのが良いのでは?
一部機能の制限ではなく、逆に一部機能のみ可能と・・・。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ブラウザのバグについては、正直難しいところがあると思うので、現時点ではそこまで考えていません。

本文については、ホワイトリストで、指定タグ、指定属性のみ許可する形にしています。<>内に指定外の文字列があれば<>を特殊文字に変換します。

CSS内の外部ファイル読み込みですが、
url()内が http:// で始まり、画像拡張子で終わる(gif,jpg,pngなど)の場合のみ許可、という形だとどうでしょう?
この場合、サーバー設定をどうしているとCGIやJavascriptを実行されてしまうのでしょうか?

セキュリティはどんどん新手の攻撃手法がでてきますので、100%対処し続けることは難しいと思いますが、できることはしたいと考えております。

url()についていろいろテストなどしてみることにしてみます。
ありがとうございました。

お礼日時:2006/04/28 13:31

>サーバーは、専用サーバー


「http:// で始まり」という事で、外部のサーバという事と認識していたのですが・・・。

となると、そもそもチェックが「http:// で始まり」でなく、「特定のドメインであるか」という事になるはずですが・・・。


いくらソースのあるサーバを管理していても、別のサーバを参照する記述を書かれれば、そこは管理外・・・。
    • good
    • 0
この回答へのお礼

質問内容に「ブログのCSSの編集」と書いたので、そう捉えられて当然ですね。

誤解を与える書き方で大変申し訳なく思います。
こちらの正しい意味としては、CSS全般ということでしたので、ブログCSS編集にとどまらず、タグ内の style="" も含めたCSSに関するものということでした。

おっしゃるように、自分のブログのCSSの編集の中に他のサーバーにおいてある画像を読み込む(直リンク)ようにするのは許されませんね。 この場合は、自分のドメインのみ、とチェックすることで問題なくなりそうですね。

先ほど申し上げたのは、とりあえずサーバーや入力媒体を考えず、純粋にCSSのみでのurl()の取り扱い、という意味で、書きました。

ブログCSS内のurlに関しては、自ドメインのみとして、なんとかなりそうですね。(当然のことながら)

鋭いご指摘、本当にありがとうございました。

お礼日時:2006/04/28 20:30

>サーバー設定をどうしていると


・・・。単に gif という拡張子はCGIですという設定をすればそうなるだけで・・・。
htm とかの拡張子も、単に元々それはHTMLですという設定がされているからHTMLとして扱われている訳で・・・。

その上、CGIはサーバ側で動作しますから、呼ばれたら後はそのサーバ側次第と・・・。
.htacessなどを用いられる環境であれば、容易にサーバの設定(一部)は変えられます。

という事で、サーバも管理し、gif は画像であるという設定をして、且つその設定の変更を許さないという前提でないと、拡張子を以って内容を判断する事は不可能です・・・・・。

補:index.htm というCGIがあっても、普通の事です。拡張子でそれが何か判断する事は危険です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

なるほど、その部分なんですね。
サーバーは、専用サーバーですべて管理下にありますので問題はないと思われます。

そのあたりもしっかりチェックしていこうと思います。
いろいろとアドバイスありがとうございました。

お礼日時:2006/04/28 15:27

>個人的意見ですが、悪用できるなら(他の人が安全に利用できないなら)、サービスを一部制限するなどは必要だと考えています。


まぁ、確かにデザインに差し支えなければ制限は問題ないでしょうね。

>拡張子がgifなだけで 中はjavascriptのコードが書かれていたら実行されてしまうのでしょうか。
JavaScript のコードが書かれていても、スクリプトの関数を呼び出せなければ実行できないと思いますよ。
多分 script タグを使わなければ無理でしょう。
(但し script タグそのものを禁止するとアクセス解析などが利用できなくなるから、そこらへんは考慮しておいたほうがいいと思います)

ただ先ほども申し上げたことと重複しますが、ブラウザをクラッシュさせるようなスクリプトを仕込む人は、
レンタルサーバーよりもアップローダーや掲示板など責任逃れできる場所を狙うのが大半です。
自分の“不健全な”サイトに仕掛けた場合よりも、他人の“健全で”人の集まりやすい場所を狙う場合のほうが効果的だからです。
被害は絶対に後者のほうが大きくなるだろうと思いますよ?

むしろブログコメントなどのほうを規制したほうが効果的かもしれません。
掲示板と同じ理屈で、人気ブログのコメントにでも危険スクリプトを仕込めば、
計算上はかなりの被害を出すことが出来るようになると思います。

ついでに言えば、一般的な CSS の組み合わせでもブラウザのクラッシュ現象は発生します。
http://www6.atwiki.jp/uriaplus/pages/33.html#ex1

早い話 100% 確実にしたければ、JavaScript はもちろんの事 CSS そのものも禁止することが何より効果的ってことです。
…何かいじめてるみたいに厳しいことを言ってすいません(^^;
    • good
    • 0
この回答へのお礼

引き続きご回答ありがとうございます。

ブログなどは自由度と安全性はトレードオフな関係になると思います。
過去にアメブロを利用したことがありますが、Javascriptは完全に使えませんでした。
CSSは知識がなかったので触ってないですが、ファイル内容をごそっと編集できたと思います。

おっしゃるように、自分のサイト内での悪用と、他者サービス上での悪用は後者のほうが多いのは確かですね。

一応、コメントについては、すべてタグは禁止してます。
安全のためにすべて禁止するというのは、理解していますが、その中で少しでもユーザーに自由にできる範囲を広げたいと模索している状態です。

ブラクラは、その場1度きりの被害ですし、後で通報すれば、強制削除などで対処できますが、セッションハイジャックなどでユーザー情報が漏れるのが一番怖いですね。

お礼日時:2006/04/28 13:15

どんなものでも使い方次第で危険なものとなり得るんじゃないかなと思います。


例えば background:url(); なんていう方法で JavaScript を読み込ませる事だってできるわけだから、
それを禁止しますって言ったらユーザーはかなりデザイン選択の幅が狭くなります。
(ちなみにコレを応用すれば一部の古いブラウザをクラッシュさせることもできます)

そんな時あなたはどうしますか?悪用可能だから禁止するのでしょうか?(^^;
厳しい言い方で申し訳ないですが、ある程度寛容にならないとユーザーも獲得できません。

まぁ、ブログというものは自分が借りたスペースで行うものですから、あまり危険行為を行うユーザーはいないと思います。
人の掲示板などへ書き込む場合よりもある程度重い責任を負うことになります。
危険行為を行った場合、多分レンタル元の業者側からサービスを強制的に停止されますよ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お答えいただいた後に、No1さんに補足したので、また違ったアドバイスをいただけたかもしれませんが、
おっしゃるように主にJavascriptの対策を考えています。

個人的意見ですが、悪用できるなら(他の人が安全に利用できないなら)、サービスを一部制限するなどは必要だと考えています。悪用されウイルスや情報漏洩が起きるシステムは、スパムの中継サーバーと同じようなものだと思います。

background:url(); については、正規表現で調べます。
url(javascript:...)なんてものは当然ダメですし、少しテストしてみますが、URLは http://..../abc.gif というファイルで、拡張子がgifなだけで 中はjavascriptのコードが書かれていたら実行されてしまうのでしょうか。

とりあえず、url()指定できるものは注意する必要があるということですね。ありがとうございました。

お礼日時:2006/04/27 18:50

>セキュリティ上


言葉の意味が広すぎるので、提示しにくいです。

例えば、背景色と文字色を同じにすると隠しとか出来、その辺の事も含めているのか。

フォント関係の指定で文字化けしやすい注意箇所がありますが、文字化けによりページ自体が変に表示され動作が保障されない事も含めてセキュリティと考えているのか・・・。

考え方によっては、「ユーザーが自由にCSSを編集」がツール等による選択式でない限り、不安要素は少なからずあります。範囲,程度問題ですが。


よって、「セキュリティ上禁止」という単語でなく、内容(理由などの詳細)を再提示される事をお勧めします。

この回答への補足

ご回答ありがとうございます。

おっしゃるとおり、「セキュリティ上」では範囲が広すぎますね。

私的には、デザイン上での問題(レイアウトがくずれたりなど)に関しては、あまり問題視していません。

やはり対策を講じたいのは、Javascriptが実行されてしまうようなものです。クロスサイトスクリプティングやセッションハイジャックにつながるようなものを排除したいと考えています。

補足日時:2006/04/27 18:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!