PHPやPythonで作ったサイトを公開したい!

Twitterやピンタレストに似たようなサイトや
それを超えるようなサイトが作りたい!
サイト公開を目指してググって勉強したり、
受講サイトなどで勉強されている方も多いと思います。

PHPやPythonを勉強して、ある程度のスキルが身につくと
掲示板や、チャットを作れるようになりますよね。
掲示板にログイン機能やサムネイルアップロード機能を付け加えると
SNSのようなサイトが作れたり
収集したデータを整形し、新着順に表示すれば
ニュースサイトが作れたりします。
日々、勉強して機能を増やし手足を伸ばしていけば
いろんな事ができるようになりますよね!

ローカル環境でテストして動作確認。
あとはサーバーにアップして
ドメインとって、サーバーIPと紐付けて、いざ公開!
ググりながらやっていけば、割と簡単に公開できちゃいますよね

でもちょっとお待ちください!!!!
サーバーに上げ、不特定多数の方が利用するということで
起こり得るリスクが存在します。

・サイトの表示がめちゃくちゃになった!
・ログインできないユーザーが発生!
・ユーザー名やプロフィールが勝手に変わった!
・違うウェブサイトに転送されてしまう!

みんなに楽しんでもらおうと思って作ったサイトが
思わぬトラブルによって大失敗といった例は多々あります。
デザインやSEO対策も大切ですが、大きなトラブルを避けるために
気をつけるべきセキュリティ対策をまとめてみました。
サーバーにアップロードして公開する前に
下記をチェックしてみてください。

サイト公開前に必ずチェック!

悪意を持ったハッカーやスクリプトを利用した宣伝目的のbotの標的にされ、
せっかく作ったサイトを荒らされないように
是非下記の項目をチェックしてみてくださいね!

ネットサービスでは利用者が入力した内容をサーバーに送信し
そのレスポンスが返ってくる仕組みになっています。
例えば、掲示板はハンドルネームや本文を入力して送信ボタンを押すことで
掲示板に書き込みが反映される仕組みになっています。
その入力した文字列をきちんと処理しておかないと

・クロスサイトスクリプティング
・SQLインジェクション

の標的にされ、サーバー管理者のみならず
サイト利用者に甚大な被害をもたらす危険性があります。
とんでもないことになってしまうまえに
しっかりチェック・対策をしていきましょう!

クロスサイトスクリプティング(xss)について

まず、クロスサイトスクリプティングとはなんでしょうか。

クロスサイトスクリプティングとは、
Webアプリケーションの脆弱性もしくはそれを利用した攻撃。

wikipedia参照

たとえば、掲示板にhtmlタグをそのまま投稿できたら
太字にしたり、色を変えたり、いろんな装飾ができて便利だと思いますが
スクリプトまで実行されたらどうでしょう。
その書き込みを見た人に無限にアラート画面を表示させパソコンを固まらせたり
大切なcookie情報を表示・投稿したり、ウィルスだらけのHPに飛ばされたり等
とんでもないことになっちゃいます!

そうならないようにタグをタグのまま表示・認識しないように

<&lt;
>&gt;

<>を&lt;&gt;に置き換えることで対策します。
これを一般的にエスケープ処理といいます。
PHPならhtmlspecialchars関数を使うことで一括で処理できます。

$out = htmlspecialchars($in, ENT_QUOTES, 'UTF-8');

SQLインジェクション

まず、データベースインジェクションとはなんでしょうか。

SQLインジェクションとは、アプリケーションのセキュリティ上の不備を意図的に利用し、
アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のこと。
また、その攻撃を可能とする脆弱性のことである。

wikipedia参照

クロスサイトスクリプティング(xss)と同様に
サイトに対して、文字列を送信しSQLを不正に操作するといったものです。

例えば、検索フォームから田中一郎と送信すれば、
usersというテーブルから田中一郎を抽出するシステムであった場合
SQLが下記のようになります。

SELECT * FROM users WHERE name = '田中一郎';

利用者が普通の使い方をすれば、問題ありませんが
SQLインジェクション対策を施していないサイトでは
悪意のある利用者が少し文字列を操作することで不正な操作が可能となります。

「田中一郎」を「田中一郎’ or 1 = 1; DELETE FROM users name =’%田%

と送信することでサーバー側は

SELECT * FROM users WHERE name = '田中一郎' or 1 = 1; DELETE FROM users name ='%田%';

として実行していまいます。
上記の例では「田」のつく名前のデータを全て削除するSQLとなり
田中一郎さんを含め、田辺さん田山さん田所さん全て消えてしまします。
これは取り返しのつかない問題に発展しかねません。

これも、クロスサイトスクリプティング(xss)と同様に
送信した文字列を置き換えるといった対策となります。

” (ダブルクォート)&quot;
‘ (シングルクォート)&#039;

「’」シングルコーテーションや「”」ダブルコーテーションを特殊文字に置き換えます。
PHPであれば、htmlspecialcharsを使うことで簡単にエスケープすることができます。

htmlspecialchars([エスケープする文字列], ENT_QUOTES, "UTF-8");

まとめ

今回はクロスサイトスクリプティング(xss)、SQLインジェクションについての説明と対策についての説明をしました。

未対策だと悪意あるユーザーの標的にされ、ユーザーデータの書き換え・消失や、不正ログインなどにつながり
せっかく楽しいサイト作成のはずが、大きなトラブルに発展しかねません。

サイトを公開する前に、しっかり気をつけて対策しましょうね!

タイトルとURLをコピーしました