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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

1回答

435閲覧

php pdo sqlインジェクションについて

退会済みユーザー

退会済みユーザー

総合スコア0

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

1クリップ

投稿2019/05/03 09:05

編集2019/05/03 11:12

PHPでログイン画面を制作しているのですが、これでSQLインジェクションの対策になっているのでしょうか?

PHP7

1$username = $_POST["username1"] 2$stmt = $pdo->prepare("SELECT pass FROM username WHERE user= ?"); 3 $stmt->bindValue(1,$username); 4 $stmt->execute();

宜しくお願いします。


追記・やったこと

  • パスワード欄に' OR'a'='aと入力しログイン試行
  • パスワード欄に1' or '1' = '1';--と入力してログイン試行
  • パスワード欄に'' OR 1 = 1; DELETE FROM employee; -- 'と入力しログイン試行

-パスワード欄に'; update account_table set pw='foo' where uid='admin'--と入力しログイン試行

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

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

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

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

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

m.ts10806

2019/05/03 09:48

SQLインジェクションが起きる情報を送信して試したりしたのでしょうか?
退会済みユーザー

退会済みユーザー

2019/05/03 09:50

ネットで調べたものや、徳丸本の内容はやってみました。しかし、この方法でインジェクション対策としてなっているか気になったので質問させてもらいました。よろしくお願いします。
m.ts10806

2019/05/03 09:58

実際に試したことを具体的に質問に記載してください。 これだけだとデバッグ依頼に等しいです(あれはやってみた?これはやってみた?と確認しないと何を試したか誰にも分からないので質問の仕方としてよろしくないです)
m.ts10806

2019/05/03 09:58

>徳丸本の内容はやってみました 徳丸さんご本人も回答者として出てこられることもあるので、余計に「どの項目をどう試したか」はあったほうが良いです。
退会済みユーザー

退会済みユーザー

2019/05/03 11:12

そうですね。やったことを追記しました。ありがとうございます。
guest

回答1

0

ベストアンサー

『徳丸本の内容はやってみました』とのことですので、やってまいりました。まずは、拙著をお読みいただきありがとうございます。

まず、SQLインジェクションがあるかないかでいうと、引用された4行に関してはSQLインジェクション脆弱性はありません。しかし、それ以外の箇所に脆弱性(SQLインジェクション以外も含めて)があるかないかはもちろん分かりません。

あと、気になることとして、SQLインジェクション検査として使用している文字列が危険すぎることです。確かに、私の本に出てくる文字列もありますが、これはあくまで「SQLインジェクションの脅威の説明」のためのものですので、脆弱性があった場合に破壊的な結果になるものがあります。

簡単に使える診断文字列としては、IPAが公開している「ウェブ健康診断仕様」があり、以下のURLからダウンロードできます。

https://www.ipa.go.jp/security/vuln/websecurity.html


「引用された4行に関してはSQLインジェクション脆弱性はありません」と書きましたが、状況によってはSQLインジェクションになる可能性がゼロではありません。
以下のブログ記事に書いたような状況が過去には(PHPのバージョンが古い場合)ありました。

ぼくがPDOを採用しなかったわけ(Shift_JISによるSQLインジェクション)

当該ブログからSQL呼び出しの箇所を引用しますが、ご質問のものとほぼ同じです。バインドの仕方が違いますが、そこが原因ではありません。

$sth = $dbh->prepare("select * from test WHERE name=?"); $sth->setFetchMode(PDO::FETCH_NUM); $name = ... $sth->execute(array($name));

なので、このような質問をされる場合は、もっと広い範囲でソースコードを示していただいた方が良いアドバスができると思います。

ただし、この問題はプログラム内部で文字エンコーディングとしてShift_JISを使っているケースでのみ発生するので、さすがに現在、そのような状況である可能性は極めて低いと思います。

投稿2019/05/03 12:20

編集2019/05/03 23:32
ockeghem

総合スコア11701

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

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

退会済みユーザー

退会済みユーザー

2019/05/03 12:42

回答ありがとうございます。webアプリを初めて制作する上で安全なwebアプリケーションの作り方は理屈から載っていて非常にわかりやすいです。ありがとうございます。引用の4行に関してはsqlインジェクションの脆弱性がないとのことで安心しました。ウェブ健康診断仕様も確認したいと思います。回答ありがとうございます感謝します。
退会済みユーザー

退会済みユーザー

2019/05/04 08:33

>>なので、このような質問をされる場合は、もっと広い範囲でソースコードを示していただいた方が良いアドバスができると思います。 -確かにそうでした。これからはもっと広い範囲でコードを示したいと思います。ありがとございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問