駆け出しWebエンジニア必読のセキュリティ概論。Webアプリケーションのセキュリティ対策がなぜ必要なのか。駆け出しWebエンジニア必読のセキュリティ概論。Webアプリケーションのセキュリティ対策がなぜ必要なのか。駆け出しWebエンジニア必読のセキュリティ概論。Webアプリケーションのセキュリティ対策がなぜ必要なのか。2019/01/30facebooktweetGoogle+はてブじゃすてぃプログラミング技術もいいけどセキュリティも学べよ!こんにちは、じゃすてぃです。peingのTwitterトークンの漏洩や、宅ファイル便の情報漏えいでセキュリティに関する話題がネット上で盛り上がっていますね。情報漏えいは運営としてももちろん注意しなければなりませんが、そもそもシステム上の脆弱性をなくさないと危険。ユーザーの大事な個人情報を流出させてしまったり、大切なデータを書き換えられたりしてしまうことの無いように、セキュリティについて最低限の知識は持っておくべきです。最近では駆け出しエンジニアが企業経験を積まずにフリーランスになったり起業をしたりするケースがよく見られます。それ自体は素晴らしいことだと思いますが、駆け出しのうちは開発技術に手一杯で意外とセキュリティについてしっかり学んでいない人が多いです。独立すると、セキュリティリスクはすべて自分の身に降り掛かってきます。プログラミングを学んで独立したのに、セキュリティの問題で大変な事件を起こしてしまわぬようにしましょう。今回は、駆け出しエンジニアに最低限知っておいてほしいセキュリティの話をしようと思います。具体的な攻撃方法や対策については以下の記事を参考にしてみてください。justy図説で簡単理解!Webエンジニアが知っておくべき脆弱性を狙った主要攻撃方法と最低...https://justy.life/programming/need-to-know-how-to-make-secure-app/こんにちは、じゃすてぃです。昨日はなぜWebアプリケーションのセキュリティ対策が必要なのかについて簡単に解説しました。今回は、Webエンジニアが絶対に抑えておくべきセキュリティ対策の実施例として、脆弱性を狙った代表的な攻撃方法と、それに対抗する方法とし...じゃすてぃセキュリティを知らないってことはお客様に対して迷惑をかける事につながるぞ!なぜセキュリティに注意しなければならないのかWebサービスは世の中に多種多様のものが無数に存在していますが、その中には個人情報を取得しているサービスが多くあります。AmazonやZOZOなどのショッピングサイトでは、ユーザーは自分の氏名・住所・クレジットカード情報など、不正利用されると大変な重要情報を保存しています。そんな情報が世に流出してしまうとどうなるでしょう?例えば、クレジットカードが不正利用され、犯罪に利用されます。ほかにも、住所を特定されて恨みを持つ人間に攻撃される恐れもあります。このように、個人情報それ自体が悪用されかねない情報、流出を防ぐためにもセキュリティ対策は開発者にとっては必須のスキルなのです。個人情報以外の例であれば、例えばSlackやチャットワークといったチャットサービスを例に考えてみましょう。てぃが友人Aに対して「ありがとう」という返事をしたとします。セキュリティが甘く、クラッキングされた結果、その「ありがとう」が「ファック・ユー」などのメッセージに書き換えられてしまう可能性もゼロではないのです。この例だと金銭的な被害はありませんが、例えばこれが主要取引先へのメッセージだった場合、結構困りますよね。笑なぜ情報が漏洩するのかなぜセキュリティ対策が必要になるのかは上記で述べたとおりです。そもそもなぜ情報が漏洩したり、サイトに不正アクセスされてしまったりするのでしょうか。情報が漏洩する理由1:悪意を持った内部関係者による情報流出こちらは人的要因です。組織内部に不満を持つ従業員や、悪意を持ったスタッフが情報を流出させるケースがあります。こちらは開発者によるセキュリティ対策では対処できませんが、運営上しっかりと対策を行う必要があります。人的要因ではありますが、こちらは悪意がないミスによる情報流出です。スタッフによるシステム操作のミスによって情報が流出してしまうケースなどが考えられます。こちらも開発者によるセキュリティ対策では対処が難しいですが、誤操作しにくいUIの設計やオペレーションの改善など、運営していく上での対策が必要になります。情報が漏洩する理由3:クラッカーによる不正アクセス世の中にはクラッカーと呼ばれ、クラッキングを行ってビジネスにしている人間がいます。一般的に言われる「ハッカー」というものです。(実際はハッカーとクラッカーは区別される用語ですが、ここではその違いについての解説は割愛します。)個人情報を大量に手に入れ、その情報を犯罪組織に売ったり、悪用して金儲けをしたりする人間がいるのです。いった悪意のある攻撃者からユーザーを守るためにも、開発者はセキュリティ対策をしっかりと行う必要があります。脆弱性とはセキュリティ上の抜け穴のことそもそも脆弱性とはなんでしょうか。脆弱性(ぜいじゃくせい)とは、コンピュータのOSやソフトウェアにおいて、プログラムの不具合や設計上のミスが原因となって発生した情報セキュリティ上の欠陥のことを言います。脆弱性は、セキュリティホールとも呼ばれます。脆弱性が残された状態でコンピュータを利用していると、不正アクセスに利用されたり、ウイルスに感染したりする危険性があります。総務省こういった脆弱性をクラッカーに発見されると、個人情報が一気に流出してしまう原因になるのです。最近でもPeingでのTwitterトークンを公開してしまっていた脆弱性や、宅ふぁいる便での情報流出事件がありました。悪意を持って攻撃を仕掛けるクラッカーという存在がいる以上、開発者であるエンジニアは責任を持ってセキュリティ対策を施さなければなりません。セキュリティ対策をした上で、保険をかけるいくらセキュリティ対策をしっかりしたとしても、情報流出をしてしまうケースがあります。人的エラーによる情報流出は、セキュリティ対策だけでは防ぎようがありません。そのため、万が一情報が流出してしまったときのために、個人情報の中でもとりわけ重要なデータであるパスワードについては、一般的にはハッシュ化という処理が施されます。ハッシュ化とはでは、ハッシュ化とはどういったものでしょうか。ハッシュ化とは、文字列を変換するアルゴリズムを使うことで、入力されたもとのデータをランダムな値に変換することを言います。ハッシュ化された文字列は「不可逆変換」され、一度変換された値をもとに戻すことはできません。それではどのようにパスワードが正しいかを担保しているかと言うと、ハッシュ化をする際に、同じ元データを入力すると、常に同じハッシュ値が出力されるようになっています。そのおかげで、パスワード自体がどんな文字列かを完全に隠すことができるのです。ハッシュ化とは入力された値をランダムな値に変換する同じ入力が合った場合、常に同じ文字列を出力する出力された値は不可逆変換され、もとの入力された値に変換し直すことはできないもとの文字列を隠すことができる万が一メールアドレスや氏名などの個人情報が流出したとしても、パスワードがわからなければ、直接金銭的被害が出てしまったり、他のサービスにアクセスできないので被害は最小限ですみます。パスワードをデータベースに保存する際は、必ずハッシュ化の処理を行いましょう。耳にする暗号化とは暗号化とは、ハッシュ化とは仕組みが異なります。ハッシュ化が不可逆変換を行うのに対し、暗号化は秘匿変換を行います。秘匿変換とは、元データを使用するけれど隠しておきたい情報を隠す際に用いられます。パスワードは、そもそもWebサイトの運営者が知る必要がないため、変換された前のデータに変換する必要がありません。そのため不可逆変換されるハッシュ化を使用します。一方で、例えば氏名や住所などの個人情報は、サイトの運営者が知る必要がある場合があり、ときには元のデータに復元する必要があります。暗号化とハッシュ化は異なる概念・用途であることをしっかり理解しておきましょう。セキュリティ概論まとめ今回は、セキュリティ対策についての具体的事例には触れませんでしたが、ざっくりとなぜセキュリティ対策が必要なのかについて概論を解説しました。セキュリティ対策が必要なのか悪意のある攻撃者によって個人情報などの重要データが漏洩する危険がある脆弱性と呼ばれるセキュリティの抜け穴から攻撃されるセキュリティ対策だけではヒューマンエラーによる情報流出を完全には阻止できないそのため、セキュリティ対策をした上で情報を守る保険をかけるハッシュ化や暗号化を用いて、万が一の情報流出から個人情報を守るWebアプリケーションを制作してお客様に会員登録してもらうことは、その時点でお客様のデータをしっかりと管理する責任が生じます。個人サービスを運営する場合でもそれは同様。セキュリティについても頭に入れ、サービス開発を行っていってください。具体的な攻撃方法や対策については以下の記事を参考にしてみてください。justy図説で簡単理解!Webエンジニアが知っておくべき脆弱性を狙った主要攻撃方法と最低...https://justy.life/programming/need-to-know-how-to-make-secure-app/こんにちは、じゃすてぃです。昨日はなぜWebアプリケーションのセキュリティ対策が必要なのかについて簡単に解説しました。Railsチュートリアルの学習をあえて薦める理由2019/01/29究極のシェル「zsh」の導入・インストール方法から設定方法を解説2019/01/26プログラミング初心者が絶対に覚えたいLinuxコマンド一覧10選2019/01/25プログラミングを独学で未経験から習得する最短ルートはいいメンターを見つけることだ2019/01/23新着記事Cookie(クッキー)とは何か理解してる?Cookieの基礎の基礎をイラスト付きで紹介:Webエンジニア基礎講座2019/02/4キャッシュって何か知ってる?キャッシュの基礎の基礎を紹介:Webエンジニア基礎講座2019/02/1図説で簡単理解!Webエンジニアが知っておくべき脆弱性を狙った主要攻撃方法と最低限のセキュリティ対策3つ2019/01/31駆け出しWebエンジニア必読のセキュリティ概論。Webアプリケーションのセキュリティ対策がなぜ必要なのか。Railsチュートリアルの学習をあえて薦める理由2019/01/29無責任ってどういうことだろう。嵐の活動休止に関する記者会見を見て感じた違和感2019/01/28プロフィール文系エンジニア経営者。こころの赴くままに行動しすぎて、苦労して入った大学を起業するために休学。スキルゼロの学生だったため、プログラミングを独学で身につけ、今ではシステム開発を主に行っている。自分が興味のあることはなんでもやりたがり。自身が独学でエンジニアになった経験を活かし、最近は独学者のプログラマー希望の学生を密着指導中。