主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Webサービスをやる上で留意すること

                
tags:
 Webサービスをやる上で気を付けねばならないことを考える。サービスをやるからには信頼を積み上げていけばいいものになり、信頼を落とせばそのサービスは使われなくなっていく。その信頼に大きくかかわってくることが、個人情報の取り扱いとセキュリティだろう。
参考 IPAのWebサイト、高木浩光氏のブログ、書籍『安全なWebアプリケーションの作り方 徳丸浩』などなど


 まず個人情報の扱いから。昨今ではあるベンチャーが、一部で画期的と評されるSDK(だったか?)を作ったが、個人情報の扱いに付随する問題を熟知していなかったために残念な展開となった。
 現実では図書館やレンタルビデオなどでサービスを受ける身分となるには、長々と書かれた個人情報の扱いなどに関する誓約にOKを出さなければならない。それはFacebook、Twitter、mixiといったWebサービスも然りである。個人情報に関してはサービス提供者は何を記録し、どのようにその情報を利用するかをはっきりと宣言せねばならない。


 次にクラッカー対策だ。僕がある場所で学生をやっていた頃、寮にいた友人が、寮のサーバにwhoisをかけたことで呼び出されたと言っていた。whoisは攻撃目的の行為ではないが、そんなことを寮のサーバにやる人なんてのは稀で、管理者としてはイレギュラな事態としてちょっと疑ってみた方が安全なんだろう。また、クラッキングの手段を知らない人が、Webサイトに迷惑をかけたいときの手段として『F5アタック』というのがある。方法はさておき、F5キーはページの更新命令をブラウザに出す。そしてブラウザはそのページに通常のリクエストを出す。通常のリクエストには問題がないと思う人もいるが、度が過ぎればサーバを止めるほどの負荷を与えることになり、サーバが停止することもある。二つの例を出して何が言いたいかというと、自分に悪意がなくとも他人に迷惑をかけることができてしまって、下手をすればそれで他人に損害を出させてこちらが訴えられる可能性まで芽生えてくるということだ。

 ではどんなことが起こりうるか、その一。サーバでexec()系の命令を使っている場合。プログラミング言語には、文字列に関数と引数を仕込んで、その文字列をexecという関数にわたすことで、その文字列が関数や値として実行されるようになっているものがある。たとえばPythonで以下を実行するとprint文が実行される。
>>> string = 'print("Gundaaaaaaaaaaaaaaam!")'
>>> exec(string)
Gundaaaaaaaaaaaaaaam!
もしWebサービスにexec()を使っているサービスがあれば、そのサーバを悪用して任意の関数を実行させ、他のサーバに攻撃をさせることができかねない。このためかIPAではexec()やこれに似たeval()を極力使わないようにと記述を見た。

 次にXSS(クロスサイトスクリプティング)というのがある。これは僕もTwitterでかかったことがあると思う。近年のWebページにのっかている文などのコンテンツはAJAXなどの流れから、JavaScriptによって制御されていることが多い。このJavaScriptを悪用するのがXSSだ。JQueryを読み込んでいるページで、ブラウザの開発者ツールを開いて、コンソールに以下のコマンドを入れてみる(ホントは手頃なinnerHTMLでやりたかったけど、この時点のOperaとChromeではできなくなっていた)。
$('body').html('<script>alert("Divekiiiiiiiiiiiiiiiiiiick!")</script>')
アラートウィンドウが出るはずである。alert()という関数が実行できるということは、JavaScriptが実行できるということなので、xmlhttpを使って勝手にどこかのサーバへリクエストを送ったり、ポストを送ったりということができる。いわば勝手に他者への攻撃や、ユーザのコンテンツ改ざんをさせてしまうことができるわけだ。これをXSSと呼ぶ。ある人のSNS上の自己紹介ページに、このXSSを利用した悪意のあるスクリプトを仕込んだとする。そうなれば、そのページを開いた様々な人がそのスクリプトを実行することになってしまう。
 この$("hoge").html()というのはHTMLタグを含む文字列を追加したいときに使う。だがそれがスクリプトを埋め込める機能を持つため、使用すべきか条件をよく確認しなければならない。たとえばユーザーにフォームを入力させて、その値をすぐにブラウザに表示したいなら、$("hoge").text()を使わなければならない。これを使うなら文字列はHTMLでなくただの文字列として解釈されるため、スクリプトを埋め込むことができなくなる。
 サーバ側でもユーザから受け取ったデータをデータベースにいったん入れるなどしたあと、Webコンテンツとして返すことはよくある。このとき適切にCGIエスケープしていなければ、XSSを引き起こすことがある。


 Webサービスを作る上で重要だと学んだ点を書いてみた。個人情報の扱いとセキュリティ。どちらもすぐさまに直接的な金にはならんのだけど、やることをやっておかなければ手痛い平手打ちをあとで喰らいかねない。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。