Slack-Python-Onboarding-Tutorialをできるように Slack側の準備をします。
- 前回は、Slack-Python-Onboarding-Tutorial をできるようにローカル環境に必要なものを準備しました。
- チュートリアル用のSlack AppとBotユーザーを作成します。
- 作ったBotにイベントを登録します。
- 環境変数にアプリの資格情報を設定します。
- 認証の設定を行います。
- 思い出の一枚
前回は、Slack-Python-Onboarding-Tutorial をできるようにローカル環境に必要なものを準備しました。
今回は、Slack-Python-Onboarding-Tutorialをできるように Slack側の準備をします。
チュートリアル用のSlack AppとBotユーザーを作成します。
新規にSlack Appをapi.slack.comで作ります。
作ったAppがSlackと対話できるようにBotユーザを作ります。
作ったBotにイベントを登録します。
Ngrokを起動して一時的に外部からローカルへアクセスするURLを取得します。
$ ngrok http 8080 ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Session Expires 7 hours, 57 minutes Version 2.2.8 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://cd36dfb5.ngrok.io -> localhost:8080 Forwarding https://cd36dfb5.ngrok.io -> localhost:8080 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
app.pyを起動します。
Ngrokを起動したターミナルとは別のターミナルを起動してapp.pyを起動します。
(slackTutorial) $ python3 app.py * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger pin code: 218-532-055
Slackの[Enable Events]をONにします。
[Request URL]には、{Ngrokで表示されているURL} + {app.pyのhearsメソッドのルートである/listening} の値を設定します。
ちゃんとサーバを使用している場合は、そのサーバのURLを設定します。
{Ngrokで表示されているURL}は、起動のたびに変わるのでその都度[Change]ボタンで[Request URL]を変えます。
環境変数にアプリの資格情報を設定します。
チュートリアルのBotでは、osモジュールを使用して環境変数からアプリの資格情報を読み込んで利用します。
そのため、環境変数に資格情報を設定する必要があります。
# bot.py # -*- coding: utf-8 -*- u"""lack-Python-Onboarding-TutorialのBotクラス.""" import os import message # 省略 # When we instantiate a new bot object, we can access the app # credentials we set earlier in our local development environment. self.oauth = {"client_id": os.environ.get("CLIENT_ID"), "client_secret": os.environ.get("CLIENT_SECRET"), # Scopes provide and limit permissions to what our app # can access. It's important to use the most restricted # scope that your app will need. "scope": "bot"} self.verification = os.environ.get("VERIFICATION_TOKEN") # 省略
認証の設定を行います。
- 左サイドのメニューにある[OAuth & Permissions]からページを開いて[Redirect URLs]を設定します。
- [Add New Redirect URL]ボタンを押下してRedirect URLを入力し、[Add]ボタンで追加します。
- Redirect URLには、{Ngrokで表示されているURL} + {app.pyのthanksメソッドのルートである/thanks} の値を設定します。
- {Ngrokで表示されているURL}は、起動のたびに変わるのでその都度[Change]ボタンで[Request URL]を変えます。
- [Save URLs]ボタンを押下して保存します。
思い出の一枚
PythonのウェブフレームワークであるFlaskを学ぶ。
Flaskは、Pythonのウェブフレームワークです。
- 和英 : (flǽsk)〔実験で使う〕フラスコ〔ウイスキーなどの〕フラスコ瓶
Flaskは、Bottleと同じくらい簡単に使えるが、Facebook認証やデータベース統合など、本格的なウェブ開発で役に立つ様々な拡張を備えている。
ウェブフレームワークは、クライアントからの要求とサーバの応答を処理してくれます。
Python Webフレームワーク Django vs Pyramid vs Flask 2015年12月 - Qiita
WSGIライブラリのwerkzeugとjinja2が入っています。
WSGIとは、PythonでのWebサーバとWebアプリケーションをつなぐインターフェースを定義した仕様です。
- 正式名称 : Web Server Gateway Interface
- 読み方 : ウィズギー
- 定義 : PEP 333 -- Python Web Server Gateway Interface v1.0 | Python.org
WSGIはJavaにおけるJava Servelet APIと同じように,WebサーバとWebアプリケーション間の汎用的なインターフェースを定義しています。WSGIを利用することで,WebサーバとWebアプリケーションの実装を切り離すことができ,WebサーバとWebアプリケーションフレームワークの組み合わせを柔軟に選択することができるようになりました。
gihyo.jp
本を見ながら実際にFlaskを使ってみます。
Flaskをインストールします。
# インストールします。 $ pip3 install flask Collecting flask Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB) 100% |████████████████████████████████| 92kB 701kB/s Collecting click>=5.1 (from flask) Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB) 100% |████████████████████████████████| 81kB 2.3MB/s Collecting Jinja2>=2.10 (from flask) Downloading https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl (126kB) 100% |████████████████████████████████| 133kB 1.3MB/s Collecting Werkzeug>=0.14 (from flask) Downloading https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB) 100% |████████████████████████████████| 327kB 2.2MB/s Collecting itsdangerous>=0.24 (from flask) Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask) Downloading https://files.pythonhosted.org/packages/da/fc/2979c425ad23d528d6ac2e1f3efdc28e572fa1e1fbd5a75171cbdd7ddaa5/MarkupSafe-1.1.0-cp36-cp36m-macosx_10_6_intel.whl Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask Successfully installed Jinja2-2.10 MarkupSafe-1.1.0 Werkzeug-0.14.1 click-7.0 flask-1.0.2 itsdangerous-1.1.0 # バージョン確認します。 $ flask --version Flask 1.0.2 Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 03:03:55) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] $ pip3 -V pip 18.1 from /Users/mana/Dropbox/ApacheDcumentRoot/Slack-Python-Onboarding-Tutorial/tryFlask/lib/python3.6/site-packages/pip (python 3.6)
リクエストの入口にする try_flask.py を作ります。
ホーム画面用の index.html を作ります。
jinja2を体験してみます。
jinja2は、Python用のテンプレートエンジンです。
テンプレートのHTMLを作ります。
# templatesディレクトリを作成して、 $ mkdir templates # その中にHTMLを作ります。 $ echo -n > templates/jinja2.html
動かしてみます。
$ python3 try_flask.py * Serving Flask app "try_flask" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 256-786-415 127.0.0.1 - - [09/Jan/2019 23:23:34] "GET /echo/ponsuke_tarou HTTP/1.1" 200 - 127.0.0.1 - - [09/Jan/2019 23:24:45] "GET /echo?name=ponsuke_tarou&do=%27write%20HatenaBlog%27 HTTP/1.1" 301 - 127.0.0.1 - - [09/Jan/2019 23:24:45] "GET /echo/?name=ponsuke_tarou&do=%27write%20HatenaBlog%27 HTTP/1.1" 200 - 127.0.0.1 - - [09/Jan/2019 23:34:24] "GET /echo/?name=ponsuke_tarou&do=HatenaBlog%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6 HTTP/1.1" 200 - * Detected change in '/path/to/try_flask.py', reloading * Restarting with stat * Debugger is active! * Debugger PIN: 256-786-415
Slack-Python-Onboarding-Tutorial をできるように必要なものを準備する。
- 前回は、Incoming webhooksでメッセージを送ってみました。
- Incoming webhooksではない方法でメッセージを送れるようにSlack-Python-Onboarding-Tutorialをやりたいとおもいます。
- Pythonをインストールします。
- チュートリアルのリポジトリをクローンします。
- 仮想環境を準備します。
- local環境へLANの外からアクセスできるようにするNgrokをインストールします。
- Web API用のテストツールPostmanをインストールします。
- 次回は、Slack側の準備をします。
- 環境
前回は、Incoming webhooksでメッセージを送ってみました。
Incoming webhooksではない方法でメッセージを送れるようにSlack-Python-Onboarding-Tutorialをやりたいとおもいます。
Onboardingは、新規メンバへの教育的なことです。
今回は、チュートリアルに必要なものを準備します。
Pythonをインストールします。
パッケージ管理ツールのpipはPythonにくっついています。
(google翻訳)python.orgからダウンロードしたPython 2> = 2.7.9またはPython 3> = 3.4を使用している場合、またはvirtualenvまたはpyvenvによって作成された仮想環境で作業している場合は、pipは既にインストールされています。
Installation — pip 19.1.1 documentation
Python開発用の仮想環境を作るツールであるVirtualenv的なものはvenvとしてPythonにくっついています。
(google翻訳)virtualenvは独立したPython環境を作成するためのツールです。
Python 3.3以降、そのサブセットがvenvモジュールの下で標準ライブラリに統合されました。
ただし、venvモジュールはこのライブラリのすべての機能を提供するわけではありません(たとえば、ブートストラップスクリプトを作成できない、ホストpython以外の他のバージョンのPython用の仮想環境を作成できない、再配置できないなど)。
Virtualenv — virtualenv 17.0.0 documentation
venv モジュールは、軽量な "仮想環境" の作成のサポートを提供します。仮想環境には、仮想環境ごとの site ディレクトリがあり、これはシステムの site ディレクトリから分離させることができます。それぞれの仮想環境には、それ自身の Python バイナリ (様々な Python バージョンで環境を作成できます) があり、仮想環境ごとの site ディレクトリに独立した Python パッケージ群をインストールできます。
venv --- 仮想環境の作成 — Python 3.7.3 ドキュメント
チュートリアルのリポジトリをクローンします。
# コピーしたURLでクローンします。 $ git clone https://github.com/slackapi/Slack-Python-Onboarding-Tutorial.git Cloning into 'Slack-Python-Onboarding-Tutorial'... remote: Enumerating objects: 19, done. remote: Total 19 (delta 0), reused 0 (delta 0), pack-reused 19 Unpacking objects: 100% (19/19), done.
仮想環境を準備します。
venvで仮想環境を作ります。
# クローンしたディレクトリへ移動します。 $ cd Slack-Python-Onboarding-Tutorial # 仮想環境を作ります。 $ python3 -m venv slackTutorial # 仮想環境を有効化します。 $ source slackTutorial/bin/activate
pip3で必要なパッケージをインストールします。
# パッケージをインストールする前に import文でモジュールを検索するディレクトリを確認しておきます。 (slackTutorial) $ python3 Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 03:03:55) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Users/mana/Dropbox/ApacheDcumentRoot/Slack-Python-Onboarding-Tutorial/slackTutorial/lib/python3.6/site-packages'] >>> exit() # pip3の情報を確認しておきます。 (slackTutorial) $ pip3 show pip Name: pip Version: 18.1 Summary: The PyPA recommended tool for installing Python packages. Home-page: https://pip.pypa.io/ Author: The pip developers Author-email: pypa-dev@groups.google.com License: MIT Location: /path/to/Slack-Python-Onboarding-Tutorial/slackTutorial/lib/python3.6/site-packages Requires: Required-by: # チュートリアルに必要なパッケージをインストールします。 (slackTutorial) $ pip3 install -r requirements.txt Collecting click==6.6 (from -r requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/1c/7c/10b4132dd952b6a04e37626258825b8aa8c1eb99545f2eb26a77c21efb55/click-6.6-py2.py3-none-any.whl (71kB) 100% |████████████████████████████████| 71kB 1.6MB/s Collecting Flask==0.11.1 (from -r requirements.txt (line 2)) Downloading https://files.pythonhosted.org/packages/63/2b/01f5ed23a78391f6e3e73075973da0ecb467c831376a0b09c0ec5afd7977/Flask-0.11.1-py2.py3-none-any.whl (80kB) 100% |████████████████████████████████| 81kB 2.6MB/s Collecting itsdangerous==0.24 (from -r requirements.txt (line 3)) Downloading https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz (46kB) 100% |████████████████████████████████| 51kB 10.1MB/s Collecting Jinja2==2.8 (from -r requirements.txt (line 4)) Downloading https://files.pythonhosted.org/packages/96/a1/c56bc4d99dc2663514a8481511e80eba8994133ae75eebdadfc91a5597d9/Jinja2-2.8-py2.py3-none-any.whl (263kB) 100% |████████████████████████████████| 266kB 2.2MB/s Collecting MarkupSafe==0.23 (from -r requirements.txt (line 5)) Downloading https://files.pythonhosted.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz Collecting pyaml==16.9.0 (from -r requirements.txt (line 6)) Downloading https://files.pythonhosted.org/packages/e3/bb/e920e88da947f3915229dedd7a3c77267d37bcfbfc2e0aa350f33f25f9b3/pyaml-16.9.0.tar.gz Collecting PyYAML==3.12 (from -r requirements.txt (line 7)) Downloading https://files.pythonhosted.org/packages/4a/85/db5a2df477072b2902b0eb892feb37d88ac635d36245a72a6a69b23b383a/PyYAML-3.12.tar.gz (253kB) 100% |████████████████████████████████| 256kB 3.1MB/s Collecting requests==2.11.1 (from -r requirements.txt (line 8)) Downloading https://files.pythonhosted.org/packages/ea/03/92d3278bf8287c5caa07dbd9ea139027d5a3592b0f4d14abf072f890fab2/requests-2.11.1-py2.py3-none-any.whl (514kB) 100% |████████████████████████████████| 522kB 4.2MB/s Collecting six==1.10.0 (from -r requirements.txt (line 9)) Downloading https://files.pythonhosted.org/packages/c8/0a/b6723e1bc4c516cb687841499455a8505b44607ab535be01091c0f24f079/six-1.10.0-py2.py3-none-any.whl Collecting slackclient==1.0.2 (from -r requirements.txt (line 10)) Downloading https://files.pythonhosted.org/packages/db/12/e5198d6e10ead20acdbba5f6a7c22d153d8ea08946ea06e4580f6666cb52/slackclient-1.0.2.tar.gz Collecting websocket-client==0.37.0 (from -r requirements.txt (line 11)) Downloading https://files.pythonhosted.org/packages/a3/1e/b717151e29a70e8f212edae9aebb7812a8cae8477b52d9fe990dcaec9bbd/websocket_client-0.37.0.tar.gz (194kB) 100% |████████████████████████████████| 194kB 1.9MB/s Collecting Werkzeug==0.11.11 (from -r requirements.txt (line 12)) Downloading https://files.pythonhosted.org/packages/a9/5e/41f791a3f380ec50f2c4c3ef1399d9ffce6b4fe9a7f305222f014cf4fe83/Werkzeug-0.11.11-py2.py3-none-any.whl (306kB) 100% |████████████████████████████████| 307kB 5.1MB/s Installing collected packages: click, itsdangerous, MarkupSafe, Jinja2, Werkzeug, Flask, PyYAML, pyaml, requests, six, websocket-client, slackclient Running setup.py install for itsdangerous ... done Running setup.py install for MarkupSafe ... done Running setup.py install for PyYAML ... done Running setup.py install for pyaml ... done Running setup.py install for websocket-client ... done Running setup.py install for slackclient ... done Successfully installed Flask-0.11.1 Jinja2-2.8 MarkupSafe-0.23 PyYAML-3.12 Werkzeug-0.11.11 click-6.6 itsdangerous-0.24 pyaml-16.9.0 requests-2.11.1 six-1.10.0 slackclient-1.0.2 websocket-client-0.37.0 # 一旦仮想環境から抜けます。 $ deactivate
local環境へLANの外からアクセスできるようにするNgrokをインストールします。
If you are running this project locally, you'll need to set up tunnels for Slack to connect to your endpoints. Ngrok is an easy to use tunneling tool that supports HTTPS, which is required by Slack.
github.com
Web API用のテストツールPostmanをインストールします。
You'll likely want to test events coming to your server without going through the actions on your Slack team. Postman is a useful tool you can use to recreate requests sent from Slack to your server. This is especially helpful for events like user join, where the workflow to recreate the event requires quite a bit of set up.
github.com
はじめてのPythonでSlackとつながってみる
- SlackAPIってなんだ?
- 1. Webhockする用のAppを用意する
- 2. Incoming Webhooksを設定する
- 3. PythonでIncoming Webhooksを使ってSlackにメッセージを送ってみる
- うまく行かなかったこと
- 環境
SlackAPIってなんだ?
よくわからないでSlackのIncoming Webhooksを実際に使ってみます。
とりあえず概要だけ見ておきます。
Webhookとは?
Webhookの説明を見ると「通知する、Webhookを送る」などの言葉が用いられているが、
これはPOSTリクエストのことを指している。
Webhookとは? - Qiita
じゃ、SlackのIncoming Webhooksって?
get.slack.help
1. Webhockする用のAppを用意する
2. Incoming Webhooksを設定する
Incoming Webhooksを設定する
以下サイトの[Incoming Webhooksのエンドポイントを取得する]に従ってIncoming Webhooksを設定する
qiita.com
3. PythonでIncoming Webhooksを使ってSlackにメッセージを送ってみる
Pythonのインターネットにアクセスできる外部モジュール「Requests」をインストールする
Requestsを使ってPythonでメッセージを送ってみる
slack_webhook.pyというPythonのファイルを作って実行すると簡単にできた。
import json, requests WEB_HOOK_URL = "https://hooks.slack.com/services/" WEB_HOOK_URL += "WebhookURLの後半" requests.post(WEB_HOOK_URL, data=json.dumps({ 'text': 'PythonでIncoming Webhooksを使ってSlackにメッセージを送ってみる.', }))
# 作ったコードを実行する。
python3 slack_webhook.py
もう少し使ってみる
slack_webhook.pyというPythonのファイルを作って実行するともう少し楽しいメッセージが送信できた。
はじめてのPythonでSlackとつながってみる
うまく行かなかったこと
リクエストにTokenがなくて not_authed が返却されました。
よくわからないでブラウザのURL欄に https://otsecbsol.slack.com/api/conversations.createと入力してみました・・・。
{"ok":false,"error":"not_authed"}
Apacheを触ってみる
Apacheは、Webサーバです。
- 正式名称 : Apache HTTP Server
「Apacheという名前はインディアン部族、Apacheに対する敬意の念をあらわすため選んだ」らしいです。
Webサーバで利用されているアプリケーションで、Netcraft社によるとシェアはここ数年下がりつつあるとはいえそれなりにあります。
Web Server Survey | Netcraft
Webサーバは、HTMLファイルやそれに付随する画像などのファイルをクライアントコンピュータに配信するサーバコンピュータのことです。
インストールの方法
起動と停止の方法
ターミナルを使います。
# 起動する $ apachectl start # 停止する $ apachectl restart # 再起動する $ apachectl restart
Apacheを起動してからブラウザで「http://localhost:80」を表示すると「It works!」と表示されます。
Apacheを設定してみる
どこに「It works!」が書かれているのでしょう?こういった情報はApacheの設定ファイルで確認できます。
設定ファイルの名前は「httpd.conf」です。
設定ファイルは、Macにデフォルトで入っているApacheの場合は「/etc/apache2/httpd.conf」です。ただ「etc」というディレクトリは「Finder」では見えないのでターミナルで開きます。
$ open /etc/apache2/
アクセスするポート番号をListenに設定します。
# # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the <VirtualHost> # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 Listen 80
設定するポート番号の注意 : 80番はよく他のアプリケーションに使われています。
環境によっては「It works!」が表示されない事があります。原因は沢山あるのですが、1つにポート番号があります。
例えば、「Listen 80」と httpd.conf に設定したとします。これはApacheが 80番 のポートを使いますよってことです。
ところが、意外と他のアプリケーションが 80番を使っていてApacheが80番を使えず起動できないことがあります。
qiita.com
まずは現在使われているポート番号を調べます。
Macでは Network Utility を使います。
何のアプリケーションとポート番号がバッティングしているか判ったら方法は2つ
① 使っているアプリのポート番号を変更する
② Apacheのポート番号を変更する
②の場合は、「Listen 80」の 80 を変更します。
「8080」あたりが無難です。
そして、Apacheを再起動するとポート番号のバッティングが治ります。
表示するファイルを格納するディレクトリをDocumentRootに設定します。
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/Library/WebServer/Documents"
「/Library/WebServer/Documents」を開いてみると「index.html」というファイルが入っています。ここに「It works!」が書かれています。
< html >< body><h1 >It works!</h1></body></html>
DirectoryIndexに設定されたファイルがデフォルトで表示されます。
ここまででDocumentRootに設定されたディレクトリにある「index.html」が表示されたことがわかりました。
この「index.html」を指定するのがDirectoryIndexになります。
「http://localhost:80/」のようにファイル名が指定されない場合はDirectoryIndexに設定されたファイル名が返されて「http://localhost:80/index.html」となります。
# # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. # <IfModule dir_module> DirectoryIndex index.html </IfModule>
PHPでの変数名の決め方
- 前回
- ルール1:変数名の前には$をつける
- ルール2:$の次はアルファベットかアンダースコアから始める
- ルール3:使えるのは「aからz」「AからZ」「_」(厳密にはもっとあります。)
- ルール4:規約には従いましょう。
ルール1:変数名の前には$をつける
じゃぁ「$34」でいい?
ルール2:$の次はアルファベットかアンダースコアから始める
じゃぁ「$A-34」でいい?
ルール3:使えるのは「aからz」「AからZ」「_」(厳密にはもっとあります。)
じゃぁ「$A_34」でどうだ
PHP: 基本的な事 - Manual
ルール4:規約には従いましょう。
みんなてんでばらばらだったら他の人が見てさっぱり分からない・・・ただ、規約っていっぱいあるし・・・・。
なので基本的なマナーレベルは押さえましょう。
マナー1:大文字と小文字の違いだけの変数名を分けて使わない。
「$a_34」「$A_34」読む人も誤記なんだかわざとなんだか・・・分かりにくい。次に書く時だって・・・・間違いやすい。
マナー2:名前に明確な単語を選んで情報を詰め込む
「$A_34」は何に使うためにこの変数を作っているか不明です。
実は、自分の年齢をこの変数に入れたかった・・・のであれば「$myoldis34」みたいな。
マナー3:誤解されない名前にする
年齢は毎年変わります・・・今の年齢を表したければ「$nowmyold」な感じ。
マナー4:読みやすく単語の区切れが分かるように。
単語の区切り方は、Pascal形式とかCamelCaseとかスネーク形式とかいろいろあって規約ごとに違います。
ここは「_」でつなぐスネーク形式で「$now_my_old」な感じ。
超ざっくりPHPってこんなもの
PHPはWebページ作成するサーバサイドのプログラミング言語です。
PHPは「フリー」です。
無料のフリー
PHPは、タダで手に入ります。
ライセンス料、サポート料、アップグレード料もダタです。
※. 個人使用でない場合や別途ツールなんかを使う場合は調べてくださいね。
自由のフリー
PHPはオープンソースなので中身をだれでも参照できます。
ソースは見たくないけど機能の使い方は知りたいっていう時でも世の中の誰かが調べた情報がインターネットにたくさん散らばっています。
自由に使っていいんです!(ある程度のルールは守ってくださいね)
造るのに好きなものを自由に選んでいいんです!
OSはWindows、Mac OS、Linux、Slaris、Unixで使えます。特別な専用サーバを用意しなくても造れるんです!
Webサーバプログラムだって特別なものを用意しなくていいんです!
CGI規格をサポートしていれば、Apach、Microsift Internet InfomationServer ( IIS ) でもいいのです。
データベースもいろいろ選べます。
MySQL、Oracle、Microsoft SQL Server、Sybase、PostgreSQLといろいろあります。
ODBC規格のデータベースもサポート済みです。
LDAP:なんとなくわかった気がしている言葉をはっきりと
LDAPとは、ディレクトリサービスを提供するサーバへアクセスするときに使うプロトコルです。
正式名称 : Lightweight Directory Access Protocol
TCPポート番号の「389」(ウェルノウンポート)を使ってサーバへ接続します。
X.500という規格の1つであるDAPというプロトコルを軽量化(Lightweight)したものです。
DAPはとても重かったので軽くしたそうです。
例えば、オープンソースのLDAPであるOpenLDAP、Windowsでよく使われるActive DirectoryなどにLDAPは実装されています。
LDAPに対応してディレクトリサービスを提供するサーバをLDAPサーバといいます。
ディレクトリサービスとは、ネットワークの情報を一元管理し情報提供などを行うサービスです。
ネットワーク内のユーザ情報や機器情報を管理して、参照・更新などを行うサービスです。
ユーザ名から部署や電話番号を検索したり、プリンターの情報を参照できたりします。
例えば、名前解決してくれるDNSやオープンソースのLDAPであるOpenLDAP、Windowsでよく使われるActive Directoryなどがディレクトリサービスです。
第1回 認証統合の概要[Active Directory編]:Active DirectoryとLinuxの認証を統合しよう【2017年版】|gihyo.jp … 技術評論社
階層型にデータを管理するデータベースを使います。
リレーショナルデータベースとは違うのです。
ディレクトリサービスと設定によってはリレーショナルデータベースも使えます。
ディレクトリサービスのように更新より参照が多く組織などから情報を見つけていく場合は階層型のデータベースのが向いています。
Pythonのインターネットにアクセスできる外部モジュール「Requests」をインストールする
- インターネットにアクセスするライブラリは標準で「urllib」がありますが、「Requests」のほうが簡単らしいです。
- pipコマンドはPyPIからライブラリをインストールして設定までをしてくれるパッケージ管理システムです。
- pip3コマンを使ってRequestsをインストールします。
- 参考文献
MacにPythone3をインストールしたので、ライブラリをインストールします。
ponsuke-tarou.hatenablog.com
インターネットにアクセスするライブラリは標準で「urllib」がありますが、「Requests」のほうが簡単らしいです。
はじめてのPythonなので簡単な方を選びます。
pipコマンドはPyPIからライブラリをインストールして設定までをしてくれるパッケージ管理システムです。
Pythone3.4以降であれば標準ではいっています。
MacのPython3では「pip3」というコマンドになります。
$ pip3 --version pip 9.0.3 from /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (python 3.6) $ pip3 --help Usage: pip <command> [options] Commands: install Install packages. download Download packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. list List installed packages. show Show information about installed packages. check Verify installed packages have compatible dependencies. search Search PyPI for packages. wheel Build wheels from your requirements. hash Compute hashes of package archives. completion A helper command used for command completion. help Show help for commands. General Options: -h, --help Show help. --isolated Run pip in an isolated mode, ignoring environment variables and user configuration. -v, --verbose Give more output. Option is additive, and can be used up to 3 times. -V, --version Show version and exit. -q, --quiet Give less output. Option is additive, and can be used up to 3 times (corresponding to WARNING, ERROR, and CRITICAL logging levels). --log <path> Path to a verbose appending log. --proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port. --retries <retries> Maximum number of retries each connection should attempt (default 5 times). --timeout <sec> Set the socket timeout (default 15 seconds). --exists-action <action> Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort. --trusted-host <hostname> Mark this host as trusted, even though it does not have valid or any HTTPS. --cert <path> Path to alternate CA bundle. --client-cert <path> Path to SSL client certificate, a single file containing the private key and the certificate in PEM format. --cache-dir <dir> Store the cache data in <dir>. --no-cache-dir Disable the cache. --disable-pip-version-check Don't periodically check PyPI to determine whether a new version of pip is available for download. Implied with --no-index.
pip3コマンを使ってRequestsをインストールします。
# Requestsをインストール $ pip3 install requests Collecting requests Downloading https://files.pythonhosted.org/packages/ff/17/5cbb026005115301a8fb2f9b0e3e8d32313142fe8b617070e7baad20554f/requests-2.20.1-py2.py3-none-any.whl (57kB) 100% |████████████████████████████████| 61kB 1.6MB/s Collecting idna<2.8,>=2.5 (from requests) Downloading https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB) 100% |████████████████████████████████| 61kB 6.2MB/s Collecting urllib3<1.25,>=1.21.1 (from requests) Downloading https://files.pythonhosted.org/packages/62/00/ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/urllib3-1.24.1-py2.py3-none-any.whl (118kB) 100% |████████████████████████████████| 122kB 3.7MB/s Collecting chardet<3.1.0,>=3.0.2 (from requests) Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB) 100% |████████████████████████████████| 143kB 4.2MB/s Collecting certifi>=2017.4.17 (from requests) Downloading https://files.pythonhosted.org/packages/56/9d/1d02dd80bc4cd955f98980f28c5ee2200e1209292d5f9e9cc8d030d18655/certifi-2018.10.15-py2.py3-none-any.whl (146kB) 100% |████████████████████████████████| 153kB 3.0MB/s Installing collected packages: idna, urllib3, chardet, certifi, requests Successfully installed certifi-2018.10.15 chardet-3.0.4 idna-2.7 requests-2.20.1 urllib3-1.24.1 You are using pip version 9.0.3, however version 18.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. # インストールされたことを確認する $ pip3 list Package Version ---------- ---------- certifi 2018.10.15 chardet 3.0.4 idna 2.7 pip 18.1 requests 2.20.1 setuptools 39.0.1 urllib3 1.24.1
pip3コマンドのバージョンが古い場合はアップグレードします。
インターネットの通信を安全にするIPsec
- 前回の勉強内容
- 勉強のきっかけになった問題
- インターネットの通信で使われるプロトコルをIPといいます。
- IPsecは、IPでの暗号化技術を使って安全にインターネットを使うための通信プロトコルです。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
IPsecに関する記述のうち,適切なものはどれか。
インターネットの通信で使われるプロトコルをIPといいます。
- 正式:Internet Protocol = Internet(インターネット) + Protocol(手順)
プロトコルとは、パソコンなどの機械同士が通信するときのお約束ごとのことです。
インターネットの世界には危険がいっぱいです。
IPsecは、IPでの暗号化技術を使って安全にインターネットを使うための通信プロトコルです。
- 正式:Security Architecture for IP または IP Security Architecture = Security(安全) + Architecture(構造) + for IP(IPのための)
IPsecで「どんなプロトコルやアルゴリズムを使うよ」という合意をSAといいます。
- 正式 : Security Association = Security(安全) + Association(つながり)
共有鍵暗号方式をIPsecでは使っていて、そのアルゴリズムはいろいろ選べます。だから、SAでどんな物を使うかきっちり定義しておきます。
使う共通鍵を交換してSAの合意を取る鍵交換プロトコルが、IKEです。
- 正式 : Internet Key Exchange = Internet(インターネット) + Key(鍵) + Exchange(交換する)
IKEは、SAを合意するときも鍵を交換するときもISAKMP(Internet Security Association and Key Management Protocol / Internet SA と 鍵管理プロトコル)というプロトコルを使い、ISAKMPメッセージ専用のUDPの500番のポートを使います。
データはESPという入れ物に入れて暗号化して送ります。
- 正式 : Encapsulating Security Payload = Encapsulating(カプセル化している) Security(安全な) + Payload(データ伝送されるパケットのヘッダー部を除いたデータの本体)
暗号化する範囲の違いによって、トランスポート・モードとトンネル・モードに分かれます。
データが改ざんされていないことを確認できるようにMACというデータを付加します。
- 正式 : Message Authentication Code = Message(メッセージ) + Authentication(認証) + Code(コード)
- 日本語 : メッセージ認証コード
このやり方をメッセージダイジェストといいます。
SPI・MAC・通信のシーケンス番号をAHというパックにして通信する時パケットにくっつけます。
- 正式 : Authentication Header = Authentication(認証) + Header(先頭部)
次回の勉強内容
セキュリティを意識したプロトコル達
- 前回の勉強内容
- 勉強のきっかけになった問題
- IPsecは、IPでの暗号化技術を使った安全なインターネット用の通信プロトコルです。
- L2TPは、送信情報を運ぶトンネルのプロトコルです。
- RADIUSは、ネットワーク上でクライアントとサーバの認証を行うプロトコルです。
- SSHは、認証技術を利用して別のコンピュータと通信するプロトコルです。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
暗号化や認証機能を持ち,遠隔にあるコンピュータを操作する機能をもったものはどれか。
ア. IPsec イ. L2TP ウ. RADIUS エ. SSH
平成26年秋期問11 SSH|情報処理安全確保支援士.com
RADIUSは、ネットワーク上でクライアントとサーバの認証を行うプロトコルです。
- 正式 : Remote Authentication Dial In User Service
- 読み方:ラディウス、ラディアス
流れは、
- 不正なクライアントやサーバが使えないように、クライアントとサーバの間に共通暗号鍵を設定します。
- この共通暗号鍵を「Shared Secret」といいます。
- クライアントから送られてきたユーザの情報で、サーバは認証を行います。
- クライアントが送る情報を「Access-Requestメッセージ」といいます。
- サーバは、認証を行い結果をクライアントへ送信します。
サーバが送る応答 | パケットの種別 | 意味 |
---|---|---|
アクセス許可 | Access-Accept | 認証結果がOK |
アクセス拒否 | Access-Reject | 認証結果がNG |
アクセスチャレンジ | Access-Challenge | 不正アクセスを防ぐために 再度パスワードの入力などを要求 |
SSHは、認証技術を利用して別のコンピュータと通信するプロトコルです。
- 英語:(Secure:安全) + (Shell:コマンド入力を受け付けて解釈するプログラム)
Telnetも別のコンピュータと通信するプロトコルですが、暗号化はしていません。
残念なことに、暗号化していないのでのぞき見し放題です。
https://community.fs.com/blog/which-client-software-is-better-for-telnet-and-ssh.html
そこでSSH!通信経路が暗号化されているのでインターネットなどを経由しても安全に通信できます。
SSHのプロトコルには、「SSH1」と「SSH2」の2種類があります。
SSH1は、RSA公開鍵暗号方式を使います。
SSH2は、DSA公開鍵暗号方式を使います。が、RSA公開鍵暗号が使えるようになり「SSH2でRSA公開鍵暗号を使う」がおすすめです。
RSAは特許の問題から使用が制限されており、特許問題を回避するためにDSAを採用したSSH2が登場したという背景があるものの特許は2000年9月で失効し、SSH2でもRSAを利用して認証できるようになりました。
次回の勉強内容
根性で不正ログインを頑張るブルートフォース攻撃
前回の勉強内容
勉強のきっかけになった問題
共通鍵暗号の鍵を見つけ出す,ブルートフォース攻撃に該当するものはどれか。
- 1組の平文と暗号文が与えられたとき,全ての鍵候補を一つずつ試して鍵を見つけ出す。
- 平文と暗号文と鍵の関係を代数式に表して数学的に鍵を見つけ出す。
- 平文の一部分の情報と暗号文の一部分の情報との間の統計的相関を手掛かりに鍵を見つけ出す。
- 平文を一定量変化させたときの暗号文の変化から鍵を見つけ出す。
不正アクセスや不正ログインする攻撃はよくあります。
攻撃 | 手法 |
---|---|
ブルートフォース攻撃 | パスワードをどんどん変えて正解を探す |
リバースブルートフォース攻撃 | IDをどんどん変えて正解を探す |
パスワードリスト攻撃 | ヒントを仕入れてIDとパスワードを推測して正解を探す |
パスワードスプレー攻撃 | IDとパスワードをどんどん変えて正解を探す |
ブルートフォース攻撃は、ありとあらゆる文字列の組み合わせを片っ端から試してパスワードや鍵を見つける攻撃です。
- 別名:ブルートフォースアタック、総当たり攻撃
- 英語 : (brute force:力ずくの) + (attack: 攻撃)
辞書ツールやら考えられるすべての情報を使って文字列の組み合わせを全て試していく、根性の攻撃です。
パスワードの文字数や文字種が少ないと被害にあいやすいです。
独立行政法人情報処理推進機構セキュリティセンターが、パスワードに使用している文字の種類別に解読の所要時間をまとめたもの
ブルートフォースアタックとは?実験から分かる危険性と有効な4つの対策
リバースブルートフォース攻撃は、ありとあらゆる文字列の組み合わせを片っ端から試してIDを見つける攻撃です。
- 別名:リバースブルートフォースアタック、逆総当たり攻撃
- 英語 : (reverse:逆の) + (brute force:力ずくの) + (attack: 攻撃)
世の中には、規定回数パスワードを間違えるとロックされるアカウントロックというものがあります。
残念なことに、IDを変えていくのでアカウントロックされにくいです。
ブルートフォース攻撃の逆で、パスワードに固定文字列を使ってIDを変えながら試していきます。
パスワードリスト攻撃は、どっかで仕入れた情報をもとにIDとパスワードを推測して攻撃します。
- 別名:リスト型攻撃、パスワードリスト型攻撃、アカウントリスト攻撃、リストベース攻撃、リストベースアタック、リストアタック
いろんなサイトで同じようなIDやパスワードを使っていると被害にあいやすいです。
パスワードスプレー攻撃は、ブルートフォース攻撃とリバースブルートフォース攻撃をいい感じに合わせています。
- 別名:low-and-slow攻撃
決まった期間に決まった回数ログインに失敗するとアカウントロックがかかります。
だから、「パスワードを固定していろんなIDを試す」をひたすら繰り返します。
アカウントロックされたら別のIDでまた試します。
ついでに、不正を検知されないようにIPアドレスを変えたり、時間をずらして実行したりします。
次回の勉強内容
Webサイトでの認証技術であるベーシック認証とダイジェスト認証を知る。
- 前回の勉強内容
- 勉強のきっかけになった問題
- HTTPの認証機能を使用することで、Webサイトにアクセスできる権限を持っているかを確認します。
- ベーシック認証は、ユーザ名とパスワードの組みをコロン ":" でつなぎ、Base64でエンコードして送信します。
- ダイジェスト認証は、パスワードをハッシュ値にして送信します。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
HTTPの認証機能を利用するクライアント側の処理として,適切なものはどれか。
HTTPの認証機能を使用することで、Webサイトにアクセスできる権限を持っているかを確認します。
会員サイトなどのWebサイトを特定の人々だけ見れるようにするには認証機能を使用します。
認証機能を使用することでWebページを見られる人かを確認します。
ベーシック認証は、ユーザ名とパスワードの組みをコロン ":" でつなぎ、Base64でエンコードして送信します。
- 別名:基本認証
- 利点:多くのWebサーバが対応しています。
- 欠点:盗聴や改竄が簡単にできます。
認証の流れは、
1. クライアントがページをリクエストする
2. WebサーバがWWW-AuthenticateヘッダでHTTPステータスコード401を返す
- HTTPステータスコード:Webサーバがレスポンスの意味を表す3桁のコードです。
- 別名:レスポンスコード
- 401(Unauthorized):「認証が必要だよん」とWebサーバは言っている。
WWW-Authenticate ヘッダーは 401 Unauthorized 応答と共に送られます。
例
WWW-Authenticate: Basic realm="Access to the staging site", charset="UTF-8"
WWW-Authenticate - HTTP | MDN
3. クライアントがBase64エンコードしたユーザ名とパスワードをAuthorizationヘッダに指定して送る
例
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Authorization - HTTP | MDN
4. Webサーバが認証する
ダイジェスト認証は、パスワードをハッシュ値にして送信します。
- 英語:digest authentication
- 別名:HTTPダイジェスト認証
- 利点:ベーシック認証で防げなかった漏洩やら改ざんができます。
- 欠点:対応していないブラウザがあります。
認証の流れは、
1. クライアントがページをリクエストする
2. WebサーバがWWW-AuthenticateヘッダでHTTPステータスコード401だけではなく「認証領域」や「認証方式」、「ランダムな文字列」を返す
- ここの
- 認証領域は、realm
- 認証方式は、Digest(ダイジェスト認証だよと知らせる)
- ランダムな文字列は、
- nonce(認証要求ごとに生成される一時的なデータでチャレンジともいう)
- opaque(ランダムに生成されるデータ)
- といいます。
3. クライアントがランダムな文字列を生成して、ユーザ名・パスワードと「2つのランダムな文字列」を使ってハッシュ文字列を生成する
4. クライアントは「2つのランダムな文字列」と「ハッシュ文字列」を送信する
MD5は、文字列から128ビットの値のハッシュ値を生成するハッシュ関数です。
- 正式:Message Digest 5
- 規約:RFC 1321
- 特徴:
- 同じ入力値は必ず同じ値になる
- 少しでも異なる入力値は全然違う値になる
- 不可逆な一方向関数を含むのでハッシュ値から効率よく入力値を割り出すことはできない
- 欠点:入力値がハッシュ値より長い場合、複数の異なる入力値なのに同じハッシュ値になってしまう「ハッシュ値の衝突」が起こる
# MD5でハッシュ値を生成する $ echo 'tarou' | md5 961ed3c18a02b9b87bcd3efa9eb2a0a9 # ちょっと違う文字だとぜんぜん違うハッシュ値が生成される $ echo 'taroo' | md5[f:id:ponsuke_tarou:20181005164602j:plain] e11337e5c8ce85a437712f57c63249e8 $ echo 'tarou' | md5 26223ea272f3f0e42cf872c01b9ba8ec
- 前回勉強したメールの認証:CRAM-MD5でも使っています。
次回の勉強内容
DDL と DLL の違い
DDLとは、テーブル構造を定義する言語です。
- 正式名称:Data Definition Language
- 別名:データ定義言語
- リレーショナルデータベースのテーブルを制御する言語。
「CREATE」「DROP」「ALTER」などが書いてあるやつです。
- テーブル全体の作成・変更・削除などを行う際に使用する。
仲間には、レコード単位の操作を行うDMLがあります。
- 正式名称:Data Manipulation Language
- 別名:データ操作言語
- リレーショナルデータベースのレコードを制御する言語。
- テーブル内のレコードの追加・検索・更新・削除などを行う際に使用する。
「SELECT」「INSERT」「UPDATE文」「DELETE」などが書いてあるやつです。
- データベースにおいてデータの検索・新規登録・更新・削除を行うための言語である。
DLLとは、プログラムを動かす時に使う部品です。
- 正式名称:Dynamic Link Library
- 別名:共有ライブラリ、シェアドライブラリ、動的リンクライブラリ
- 様々なプログラムから利用される汎用性の高い機能を収録した、部品化されたプログラムのこと。
- 単体で実行することはできず、実行可能ファイル(EXEファイルなど)が起動する際に自動的に連結されてメモリ上に展開される。
- 多くのプログラムが共通して必要とする機能が収められており、様々なプログラムの一部として取り込まれて実行される。
メール送信での認証技術に POP before SMTP と SMTP-AUTH
- 前回の勉強内容
- むかしむかし、SMTPには認証の仕組みがありませんでした。
- POP before SMTPは、メールを送信する前にPOP3認証を行って認証できたらメールを送信する仕組みです。
- SMTP-AUTHは、メールサーバがメール送信者をIDとパスワードで認証してからメールを送信する仕組みです。
- 次回の勉強内容
前回の勉強内容
むかしむかし、SMTPには認証の仕組みがありませんでした。
それに伴い、大量のメールを送り付ける「迷惑メール」が流行りました。
そこでメール送信時の認証技術として、「POP before SMTP」「SMTP-AUTH」ができました。
- 送信処理と転送処理を同一の仕組みで扱っている
- メールの投稿をするユーザを認証する仕組みがない
- 暗号化機能が標準で実装されていないため通信経路上を平文のメッセージが流れる
などの脆弱性があり、特に1,2の原因によって複数のメールサーバの第三者中継を利用した迷惑メールの温床となっていました。
平成18年秋期問74 SMTP-AUTH認証はどれか|応用情報技術者試験.com
POP before SMTPは、メールを送信する前にPOP3認証を行って認証できたらメールを送信する仕組みです。
SMTPに認証の仕組みはないけれど、メール受信で使うPOP3にはIDとパスワードによる認証の仕組みがあります。
SMTP-AUTHは、メールサーバがメール送信者をIDとパスワードで認証してからメールを送信する仕組みです。
SMTP-AUTHの特徴はどれか。
クライアントがSMTPサーバにアクセスするときにユーザ認証を行い、許可されたユーザだけから電子メールを受け付けます。
SMTP-AUTHにおける認証の動作を説明したものはどれか。
ア. SMTPサーバは,クライアントがアクセスしてきた場合に利用者認証を行い,認証が成功したとき電子メールを受け付ける。
平成26年秋期問37 SMTP-AUTHにおける認証の動作|応用情報技術者試験.com
SMTP-AUTHの特徴はどれか。
ウ. メールクライアントからメールサーバへの電子メール送信時に,ユーザアカウントとパスワードによる利用者認証を行う。
平成28年秋期問16 SMTP-AUTHの特徴はどれか|情報処理安全確保支援士.com
認証方法には種類があります。
認証方法 | 方法 | 説明 |
---|---|---|
PLAIN | 暗号化しないでユーザー名/パスワードをそのまま送る仕組み | パスワードが平文で流れているので危険な方式 |
LOGIN | 標準化されておらず独自の実装をしているメールサーバーもあって互換性が低い方式 | ユーザー名/パスワードはBASE64に変換される ユーザー名/パスワードを別々に送信したり一緒に送信したりする(やり方はそれぞれ) |
CRAM-MD5 | パスワード文字列がそのままネットワークを流れることがないように、暗号化が施される MD5を使用してチャレンジ-レスポンス認証を行い、パスワードそのものは暗号化された状態でも送信はしない |
流れ 1. サーバーとクライアントが共通に知っているパスワードを用意 2. サーバーは、クライアントに対し任意の文字列(Challenge文字列)を送る 3. クライアントはそのChallenge文字列と共通パスワードを使い、MD5で計算処理を行う 4. 結果をサーバーに返す 5. クライアントからの返答が傍受されても、ここからパスワードを復元するのは困難 6. サーバーは、自分でも同じ処理を行ない、結果が一致すれば相手が正しくパスワードを知っているとして認証する |
DIGEST-MD5 | CRAM-MD5の拡張版で、辞書攻撃や総当り攻撃などに対する耐性を高めたもの |
サブミッションポートを合わせて使います。
スパムメール対策として,サブミッションポート(ポート番号587)を導入する目的はどれか。
エ. SMTP-AUTHを使用して,メール送信者を認証する。
平成28年春期問44 サブミッションポートの導入目的|応用情報技術者試験.com
OP25Bでポート25番を使えないようにして、送信専用ポートとしてサブミッションポート587番を使います。
送信専用となったポート587番にアクセスしたユーザをSMTP-AUTHで認証します。
ponsuke-tarou.hatenablog.com