重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

PHP, HTML, MySQLと一部javascriptで添削システムを作っています。
以下のようなページを作りました。
http://flab.aid.design.kyushu-u.ac.jp/~harano/pr …
HTMLタグをつけたままデータベースに保存 しています。
ですが、このままだと入力する人が勝手にHTMLタグやjavascriptのソースなどを書けてしまいます。
javascriptはあまり詳しくありませんが、データを消すようなソースを入力されてしまっては機能しません。
何かいい改善案があればどんな情報でもいいので教えてください。

A 回答 (2件)

一般的にいう、SQLインジェクションとクロスサイトスクリプティング(XSS)を行えてしまう状態ですね


この二つの問題は分けて考えなくては混乱するだけですので整理します

HTMLのタグやJavaScriptが悪さをする瞬間というのは、ブラウザに出力するタイミングです
ですからデータ入力時やデータベースに保存する場合には、HTMLやJavaScriptは何にも悪さはしません、単なる文字列としてデータベースに保存されますので、データベース保存時や選択時にHTMLタグやJavaScriptに対しては気にすることはありません。

しかし、入力欄にSQLインジェクションされるとデータ保存時や選択時に誤った処理をしてしまいますのでSQLインジェクションに対してはSQL文を生成する瞬間に対策をしなくてはなりません




入力欄

validate(文字数や、数値のみ入力させたい場合、半角英数のみの場合などの検査をする)

DBにINSERT/UPDATE *SQL文を生成時にSQLインジェクション対策のエスケープをする

DBからSELECT *SELECT文を生成する場合にもSQLインジェクション対策用のエスケープをする

取得されたデータを何かしら処理する

HTMLとして出力する *この時にXSS用のエスケープをして出力をする


ざっとこんな感じかな

つまり
XSSとSQLインジェクションとでは対策をする方法や場所が違うということです。
SQLインジェクションはSQL文を生成(SQL文として出力)するタイミングで、XSSはHTMLとしてブラウザに対して出力をするタイミングで ということになります



さまざまなセキュリティ対策が必要ですが、どんな対策に対しても「入力は甘く、出力がギチギチに絞める」が鉄則だと私は思います。

入力されてくるデータは何が入ってくるのか分からないのでとりあえず受け取る。
出力するデータは、こちらの思うがままにギチギチに締め付けてやれば良い。
ということです。
    • good
    • 0
この回答へのお礼

SQLインジェクションですか。
XSSは他の人から教えてもらったのですが、そちらの方までとは知りませんでした。
早速、今から調べながらとりかかろうと思います。

inu2さんの回答を読んだだけで勉強になります。
分かりやすい説明をしていただきありがとうございました。

お礼日時:2008/01/17 11:17

No.1の方の補足となりますが。


//毎回思うがinu2さんの文は秀逸だと思うんだ・・・

具体的には
 htmlspecialchar()
  http://jp.php.net/manual/ja/function.htmlspecial …
 mysql_real_escape_string()
  http://jp.php.net/manual/ja/function.mysql-real- …
 pg_escape_string()
  http://jp.php.net/manual/ja/function.pg-escape-s …
 is_numeric()
  http://jp.php.net/manual/ja/function.is-numeric. …
 strlen()
  http://jp2.php.net/manual/ja/function.strlen.php
この辺の使い方、使い時をマスターすると良いです。
他の識者はもっといろいろ知ってるかもしれません。

そのほかにも活用できる関数はありますが、その辺は工夫と努力、それとセキュリティに関する情報のアンテナを常に意識しつつ勉強すると良いです。

URLから察するに大学の課題の一環かなと思いますが、
TAなどの人の方が専門的知識豊富でしょうからそちらに当たってみるのも良いかもしれません。
バリデートって何、クロスサイトスクリプティングって何と聞けば嬉々として具体的なことを教えてくれることでしょう。
// TAの人が現場を知っててコアな人だと
// デザインパターンやオブジェクト指向まで波及した話を
// してくれるかもしれませんね。
    • good
    • 0
この回答へのお礼

勉強するポイントまでご親切に教えてくださって本当にありがとうございます。
これは学校の課題のようなものです。
教授に「ここの部分のセキュリティが甘い」と言われた部分でした。
頑張ります。

お礼日時:2008/01/17 11:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!