質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

1回答

357閲覧

PHPで作るWebAPIでスマホアプリを認証・認可する方法

saitou_san

総合スコア32

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2023/02/02 03:40

実現したいこと

XAMPPを使って公開しているWebサーバにあるユーザ情報を使って、スマホアプリの認証と認可を行いたいです。
大まかなやり方と学習するべき事、学習できる記事などを教えていただければ幸いです。

出来たこととやりたいこと

1.スマホアプリにusernameとpasswordを入力するフォームを作る(出来た)

2.usernameを渡すと、ハッシュ化されたパスワードを送るWebAPIを作成する(出来た)

3.アプリ側で入力したパスワードとハッシュ化されたパスワード照合し、一致したらトップ画面に遷移する(出来た)

4.アプリ側からサーバへユーザ個人の情報を更新するリクエストを送り、サーバ側で受け取る(やりたい)

4.の項目を実現するにあたり、他のユーザからのなりすましを防ぐためにどのようなことをすればよろしいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2023/02/02 03:58

ハッシュ化はサーバー側でやらないと意味ないような…。
yuma.inaura

2023/02/02 04:56

「usernameを渡すと、ハッシュ化されたパスワードを送る」っていう段階で脆弱性がありそうな
m.ts10806

2023/02/02 05:37

ひとまとまりのアプリケーションを作るための学習に効果は皆無なのでひたすら基礎からミニマムプログラムで地力をつけてください。としか。
saitou_san

2023/02/02 05:57

すみません。質問からそれますが、ハッシュ化されたパスワードを送るのがなぜダメなのですか?
yuma.inaura

2023/02/02 06:10

自分のものでなくても、どんなusernameでもAPIに送って(ハッシュ化された)パスワードをゲットできる作りになってませんか?
saitou_san

2023/02/02 07:05

前回の質問では、Kivyで作ったスマホアプリで、入力されたパスワードとサーバ側から渡されたハッシュ化されたパスワードの照合方法を募集していました。
m.ts10806

2023/02/02 07:31

現状の内容では関連性不明ですし、初めて今回の投稿を見る人への配慮をお願いします。
hoshi-takanori

2023/02/02 08:50

> サーバ側から渡されたハッシュ化されたパスワード 他の方も書いてますが、これは重大な脆弱性です。商用サイトでやったら、新聞に載るレベルじやないかな。自己流でやるのではなく、ちゃんと正しい方法を学びましょう。
guest

回答1

0

2.usernameを渡すと、ハッシュ化されたパスワードを送るWebAPIを作成する(出来た)

3.アプリ側で入力したパスワードとハッシュ化されたパスワード照合し、一致したらトップ画面に遷移する(出来た)

他の回答者さんからもご指摘がある通り、
この時点でかなりセキュリティがガバガバになります。
まずは、
ハッシュ化、並びに照合の部分は、サーバー側でやるべきでしょう。
(アプリに最終的に照合する文字列を保持する、または処理させる時点で危ないため)

サーバー側で、DBに登録するのも、もちろん、ハッシュ化されたパスワードを登録、とする感じです。

ただし、ハッシュ化するだけでは、パスワードの保存においては不十分とされることが多いため、
しっかりと、暗号化するという方向で調べた方がいいかと。

また、現代では、Webアプリと、ネイティブアプリの認証の際、
ユーザー名とパスワードのみでなく、アクセストークンを使うことがほとんどです。
(一時的にせよ恒久的にせよ)
つまり、認証に使う情報としては、
ユーザーネーム・パスワード(送信時はそのままで、サーバー側で、暗号化と照合をする)・アクセストークンの三つを照合にかける、ということです。

ただし、どこまでやっても、完璧に攻撃等を防ぎ切る方法とはなりません。
大事なのは、できる限り、ほぼほぼの攻撃等を防ぐ、という、実装限界と、どれくらい防げるかのバランス見極めかと。
(もちろん最低限ここは防がねば、とのラインはあります)

投稿2023/02/02 06:05

miyabi_takatsuk

総合スコア9528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saitou_san

2023/02/02 09:05

パスワードの照合をサーバ側で行う場合は、入力されたusernameとpasswordをサーバ側のAPIにHTTPリクエストとして送るということですか?すみません、質問内容からそれていますが、ご回答していただけると幸いです。
miyabi_takatsuk

2023/02/27 01:57

返信が遅れてすみません。 > 入力されたusernameとpasswordをサーバ側のAPIにHTTPリクエストとして送る そういうことです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問