【初学者向け】セキュリティ対策入門0〜環境構築編〜本記事の目標OSコマンドインジェクションの概要、原因、対策について理解することです。以下の内容を終えていることです。【初学者向け】セキュリティ対策入門0〜環境構築編〜どうでもいいお話あまり主要ではない脆弱性についてはこちらの番外編で扱っていきます。主要ではないというのは被害ケースをあまり耳にしないという意味で、脆弱性をつかれたときの被害が少ないというわけではないので悪しからず。概要OSコマンドについて不正な命令を入れ込むことです。こちらのSQLインジェクションがSQL文について不正な命令を入れ込むことならば、こちらはOSコマンドというわけです。実際に見てみましょう。いえ、番外編なのでGitHubにソースはないので本記事上で紹介します。$file_list;PHPファイルでOSコマンドを実行したい場合、shell_execという関数を使う必要があります。{任意のOSコマンド}のような文字列をクエリストリングスのparamに与えられたときです。OSコマンドについて学んだことがある方なら、これのやばさが伝わると思います。自由なOSコマンドが使えれば任意のファイルを書き換えたり削除したり様々な被害をもたらすことが可能です。入力値をそのままOSコマンドの一部に渡していることです。対策そもそも使わないOSコマンドをユーザの入力で行わなければいけないケースというのはなかなかないはずです。あったとしてもライブラリを使用するなどの選択肢を検討する必要があります。そもそも使わない観点では、php.iniで特定の関数を実行不可にできるので本対策を行う場合はそれも合わせて行った方がいいでしょう。エスケープする上述の通り、こういった処理は実装しないのが一番です。いえ、どうしても実装したい場合はエスケープする関数もあります。escapeshellargという関数です。具体的にすると以下のような感じです。今回の内容は以上です。最後までご覧いただきありがとうございました。FargateにデプロイするはじめにAI、機械学習やビッグデータ解析などでPythonが注目されています。Fargateにコンテナでデプロイをするまでの一連の流れを毎日投稿していきます。Fargateの構成は1)学習コストが低い2)共同開発しやすい3)スケールしやすいという特徴があり、個人やスタートアップによるwebアプリケーション開発のベストプラクティスであると考えています。項目毎に細切れに投稿していくので詳細については各投稿を参照してください。日々記事を投稿しそのリンクを本ページに追加していくので、本ページは目次として使ってください。User(2)URLs(3)Views(4)認証機能(5)環境変数7.Emailの設定8.ファイルのアップロード9.権限10.検索11.Perfomance12.セキュリティ13.デプロイTweetQiitaで続きを読む投稿日:2020-01-23T20:50:57+09:00DockerでHello,WorldはじめにDockerをインストールしてHello,Worldを表示させます。OSはMacを使用します。Hubで無料のアカウントを作成します。Macをダウンロード、その後インストールします。--versionでバーションが表示されればインストール成功。Dockerのテストrunに便利なイメージです。imageがコンテナにダウンロードされ、イメージが実行されます。infoコマンドでDockerの情報が確認できます。1...これでDockerがインストールされ無事に起動したことが確認できました。TweetQiitaで続きを読む投稿日:2020-01-23T19:28:00+09:00Alpineベースのimageにruby2.2.3を入れる本当はalpine-rubyをベースにするべきなんだろうけど諸事情でJava系のベースにする必要があったので、rbenvを自力で入れて構築することにしました。出来上がったDockerfileはこちら。.build-dependencies大きな障害はは以下のようにopensslの1.0を取得することでした。install時に以下のようなエラーが発生する。エラーの原因としては、ruby2.4以下の場合はopenssl1.1系に対応していないため、openssl1.0を入れる必要があるからでした。1.1.x.ubuntuベースのimageで構築するならこちらの記事で言及されているように有志が開発したパッチを当てれば動きますが、alpineの場合は自力で1.0系を入れる必要があります。現在openjdk:8-jdk-alpineではデフォルトでv3.9のリポジトリを参照しているが、v3.9ではopensslは1.1系の提供になっています。こちらで調べると1.0系の取得には1つ前のv3.8のリポジトリから取得が必要のようです。https://pkgs.alpinelinux.org/packages?name=openssl&branch=v3.8&repo=mainそこでapkから取得する前に参照先にv3.8のリポジトリを追加して上げる必要があります。/etc/apk/repositories追加後にopenssl-dev=1.0.2u-r0とバージョンを指定することで1.0系のopensslを取得することができます。lib?エラーが発生していたが、修正前のDockerfikeでlibssl1.0を入れていたことが原因でした。ssl系のライブラリ同士でバッティングしていたっぽい?rbenvの前はruby-installを使用して軽量化を図っていましたが、上と同じOpenSSLのエラーがどうしても解消できなかったので諦めることに...ruby-installで上手く行けば多分もう少し軽くできそう。ビルドに必要のないパッケージは残したくないので.build-dependenciesでまとめて最後の行で一括で削除しています。/usr/local/bundle/cache/*.gemでgemのキャッシュを消すようにしています今どき2.2.3を使うことはあまりないと思いますが、備忘録として残しておこうと思います。TweetQiitaで続きを読む投稿日:2020-01-23T15:14:49+09:00Dockerでよく使うコマンドDockerでよく使うコマンド下記サイトを参考に自分が見やすいように表にしました。(内容はほぼそのままです。0TweetQiitaで続きを読む投稿日:2020-01-23T13:48:25+09:00Dockerで入れたPostgreSQLへのPDO接続でエラーが出て悩んだ。出たエラーこんにちは、Docker初心者です。なんならMySQLばっかりだったのでPostgreSQLも初です(汗)タイトルのままです。下のようなエラーが出てしまったンゴです。ちなみに書いていたPDOはこんな感じです。問題はdocker-compose.ymlとPDOの両方にありました。ymlファイルはこちら。コメントアウトで間違ってる点書いてます。HOST名になるらしい。PDOほhostを変える必要あり。#HOSTがおかしいのかと思ってあとから付け加えたもの。6001:5432接続完了!パイセンに感謝です。Qiitaこの記事に触発されたから。俺もやってみようと思った。あと、うまくいったらテスト環境でLinuxベースのやつさくさく切り替えられそうだしね。on~~」のチェックを入れてOK。これで、tcp://localhost:2375/でDockerが待ち受けしてくれるようになる。同じ画面のResources>FileSharingをクリック画面右にドライブレターが表示されるので、CにへっくいれてOK画面はもう少しそのまま。閉じないで!!DockerのProxyとDNS設定DockerはWindows標準とは別に独自のProxyとDNSの設定を持っている。クローズドな環境の場合はこちらも設定する。同じ画面のProxiesをクリックすると、右側に設定画面が表示される。同様にNetworkをクリックすると右側にDNSの切り替えスイッチとアドレス設定がでてくる。ONにしてIPを「8.8.8.8」にした方が軽快に使える場合もあるが、まぁ、環境とご相談で。標準だと/mnt/cになって使いにくいので変更する。動作確認いったん、DockerもWSLも一度再起動しとく(なんか不具合よく起きたのでお文じない)再起動したのを確認したら、動作確認。~~エンジンバージョンがWindowsと一致している。https://docs.docker.com/get-started/今日はここまでできたので満足!!TweetQiitaで続きを読む投稿日:2020-01-23T00:55:58+09:00SpringBootでグループウェアの開発3〜DB接続の続き〜DB接続の続き前回でDB接続をして、新規登録まで作ろうとしたのですが、そこまでいかなかったので続きをやっていきます!とりあえずここまでビルド&実行できるか確認build.gradleを編集した際に自動でクラスパスの読み込みをするかのダイアログが右下に出てきたので、自動で読み込む設定にしました。虫マークのデバッグメニューを開くと、初めてのデバッグの場合はlaunch.jsonを作るボタンがあるので、launch.jsonを作成する。デバッグメニューでDemoAppcationから始められるので、デバッグをスタートします!とりあえず実行は出来た。MyBatisでマッピングjpaとかの選択肢もあるけど、SQLを書く現場の方が多そうだからMyBatisでマッピングすることにした。build.gradlebuild.gradleのdependencies内に以下を追加。mybatisはバージョン指定しないと読み込んでくれないので、mvnrepositoryで希望するバージョンを調べて指定する。}}接続確認DockerのMySQLを起動してテストデータを入れる。);SpringBootを実行→http://localhost:8080/user/getにアクセス。[{"id":"1","name":"test","password":"test","role":"ROLE_ADMIN","updated_at":"2020-01-22T12:17:56.000+0000"}]jsonでデータが返される。