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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1281閲覧

セキュリティ上問題があるかを教えてください。

gomatan1258

総合スコア67

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2017/10/02 13:09

編集2017/10/03 01:34

index.html

html

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>タイピングサイト</title> 6<link rel="stylesheet" href="home.css"> 7</head> 8<body> 9 10<div id="moji"> 11下記設定を選んでタイピング練習をしましょう! 12</div> 13<div id="container"> 14<form action="index.php" method="get"> 15 16 <div class="second"> 17 <p><input type="radio" name="second" value="30">30秒</p> 18 <p><input type="radio" name="second" value="60"checked>60秒</p> 19 <p><input type="radio" name="second" value="90">90秒</p> 20 <p><input type="radio" name="second" value="120">120秒</p> 21 </div> 22 <div class="method"> 23 <div><p><input type="radio" name="home" value="homePosition" checked>ホームポジションに戻る練習</p></div> 24 <div><p><input type="radio" name="home" value="normal">ノーマルで練習</p></div> 25 </div> 26 <div class="position"> 27 <p><input type="radio" name="position" value="tyuudann" checked>中段</p> 28 <p><input type="radio" name="position" value="joudann">上段</p> 29 <p><input type="radio" name="position" value="gedann">下段</p> 30 <p><input type="radio" name="position" value="hitosasiyubi">人差し指</p> 31 <p><input type="radio" name="position" value="all">全ポジション</p> 32 </div> 33 <p><input type="submit" value="送信"></p> 34 35</form> 36 37</div> 38</body> 39</html>

home.css

css

1.second { 2 width: 300px; 3 padding-left: 30px; 4 background-color: skyblue; 5} 6 7.position { 8 width: 300px; 9 padding-left: 30px; 10 background-color: pink; 11} 12 13.method { 14 width: 300px; 15 padding-left: 30px; 16 background-color: #ccc; 17} 18 19#container { 20 width: 300px; 21 margin: 0 auto; 22} 23 24#moji { 25 width: 300px; 26 margin: 0 auto; 27} 28

index.phpはjavascriptの部分一部だけ表示します。

php

1if(isset($_GET["home"]) && $_GET["home"]=="homePosition") { 2 ?> 3 fjs = "fj";//javascriptの関数の外で定義しています。 4 <?php 5 }elseif(isset($_GET["home"]) && $_GET["home"]=="normal") { 6 ?> 7 fjs = ""; 8 <?php 9 } 10 ?>

こちらはホームポジションに戻る練習のためにfjを挿入するかどうか決めています。

php

1time = <?php if(isset($_GET["second"])) {//timeもjavascriptの関数の外で定義しています。 2 echo $_GET["second"]; 3 }

こちらはtime30秒にするか60, 90, 120秒にするかを決めています。

php

1<?php if(isset($_GET["position"]) && $_GET["position"]=="tyuudann") { ?> 2 for(var i=0; i<100; i++) { 3 words.push(createPart("asdghkl"));//javascriptのコードです。 4 } 5 <?php } ?> 6 7 <?php if(isset($_GET["position"]) && $_GET["position"]=="joudann") { ?> 8 for(var i=0; i<100; i++) { 9 words.push(createPart("qwertyuiop"));//javascriptのコードです。 10 } 11 <?php } ?> 12 <?php if(isset($_GET["position"]) && $_GET["position"]=="gedann") { ?> 13 for(var i=0; i<100; i++) { 14 words.push(createPart("zxcvbnm,."));//javascriptのコードです。 15 } 16 <?php } ?> 17 18 <?php if(isset($_GET["position"]) && $_GET["position"]=="hitosasiyubi") { ?> 19 for(var i=0; i<100; i++) { 20 words.push(createPart("rvtgbyhnum"));//javascriptのコードです。 21 } 22 <?php } ?> 23 24 <?php if(isset($_GET["position"]) && $_GET["position"]=="all") { ?> 25 for(var i=0; i<100; i++) { 26 words.push(createPart("qwertyuiopasdghklzxcvbnm,."));//javascriptのコードです。 27 } 28 <?php } ?>

こちらは上中下段人差し指のどれを練習するかを決めています。

タイピングソフトを作っています。
上記のようにhtmlからフォームのラジオボタンのみを使って、index.htmlからindex.phpのscriptタグの中のjavascriptにphpのコードを挿入してフォームの値を渡しています。ちゃんと動くのですが、セキュリティ上問題はないでしょうか?phpはまだ素人です。分かりにくい質問で申し訳ないのですが、よろしくお願いします。

更新しましたが、まだ見にくいかと思います。申し訳ありません。
当方の目的はinput type="text" ではなくinput type="radio"でもセキュリティ上安全どうかを知りたいです。index.php貼ろうとしましたが文字数が超えて入力失敗しました。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/10/02 13:13

どのようなポリシーがあっての確認でしょうか?
gomatan1258

2017/10/02 13:17

phpにはXSSやCSRF、その他色々なセキュリティの問題があるので、ラジオボタンだけだと、気にしなくてもいいのかが知りたいです。よろしくお願いします。
ockeghem

2017/10/02 14:15

ソースが読みにくいで、index.phpの完全なソースを示して下さい
kei344

2017/10/02 15:39

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
m.ts10806

2017/10/03 00:14

phpに問題があるのではなく対策していないWebサイトに問題があるわけですが。ご提示の脆弱性は言語関係なく起き得ますし作り方の問題です。
t_obara

2017/10/03 01:43

ここでセキュリティの問題がないと言われたとして、安心してサービスを提供されるのでしょうか?セキュリティ上の問題を指摘され、修正して安心できるのでしょうか?
gomatan1258

2017/10/03 02:01

自分にはまだphpを使う資格がないということですね。どんな被害に合うとか、逆にどういうことをやって被害を与えられるとかもわからないので、もうちょっと勉強してみます。
guest

回答1

0

ベストアンサー

ソースの全容がつかめないのでコメントしづらいですが、クエリ文字列 second に 1; alert(1) と入力してみてください。アラートが表示されませんか?

投稿2017/10/02 14:20

ockeghem

総合スコア11701

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

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

gomatan1258

2017/10/03 01:53

申し訳ございません。クエリ文字列のsecondに1とはURLのsecond=1にするということでしょうか?先程やってみたら、1秒で終わる仕様になりました。alert(1)とはどこに書くのでしょう?
ockeghem

2017/10/03 02:18

違います。second=1;alert(1) ですが、セミコロンをパーセントエンコードして、second=1%3balert(1) が確実かと思います
gomatan1258

2017/10/03 02:24

ご返答ありがとうございます。1がアラートで出力されました。
ockeghem

2017/10/03 02:31

ですよね。つまり、セキュリティ上問題があるということです。一種のクロスサイトスクリプティングです
gomatan1258

2017/10/03 02:34

なるほど!こういうのを全然知りませんでした。勉強になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問