• 締切済み

セキュリティ関数の使い分けに関して。

mysql_real_escape_string()とhtmlentities()の違いを教えてください。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

関連するQ&A

  • mysql_real_escape_string?

    mysql_real_escape_stringは、非推奨なのでしょうか? ▽PHP: mysql_real_escape_string - Manual   http://php.net/manual/ja/function.mysql-real-escape-string.php >この拡張モジュールを使うことはおすすめできません。 MySQLi あるいは PDO_MySQL を使うべきです この「拡張モジュール」って何を意味しているのでしょうか? 「mysql_real_escape_string」のことでしょうか? それとも、mysql_set_charset()などで、「デフォルトの文字セット」を設定しておけば、利用しても良いのでしょうか?

    • ベストアンサー
    • PHP
  • mysql_real_escape_string

    mysql_real_escape_stringについて調べていると、私と同じことを疑問に思い質問している人がいました。 こちらのページです。 http://okwave.jp/qa/q4423735.html mysql_real_escape_stringを通してDBに入れるとします。 すると、「テスト\」というデータをINSERTをするとDBには「テスト\」で入るのでしょうか? では、mysql_real_escape_stringを通さずにdbに入れても 「テスト\」というデータをINSERTをするとDBには「テスト\」で入ると思います。 上記のとおりとした場合、PHPはどうやってmysql_real_escape_stringを通したかどうか判定しているのでしょうか? 現在、mysql_real_escape_stringを通してDBに入れると、 「テスト\\」というデータがDBに入っています。 それをどうやって戻すのか調べていて、上記の質問を見つけました。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • 括弧内の処理の順序

    プログラムを見ていて気になった点があります。 htmlspecialchars(mysql_real_escape_string(stripslashes($_POST["inp01"])),ENT_QUOTES) 上記の書き方の場合、処理される順番は 内から「stripslashes」→「mysql_real_escape_string」→「htmlspecialchars」になるんでしょうか? 逆に 外から「htmlspecialchars」→「mysql_real_escape_string」→「stripslashes」 でしょうか。 また処理の順番ですが、 「htmlspecialchars」→「stripslashes」→「mysql_real_escape_string」が正しい形でしょうか。

    • ベストアンサー
    • PHP
  • PHPのPDOについて

    例えば手続き型でしたら、値をデータベースに追加するとき $sql = sprintf( 'INSERT INTO member SET id=%d, message="%s" ', mysql_real_escape_string($id), mysql_real_escape_string($message) ); mysql_query($sql) or die(mysql_error()); など「mysql_real_escape_string」を使って多少なりともセキュリティーをかけると思うのですが、PDOですと下記に書かれている以外に見たことないのですが、「mysql_real_escape_string」などはやらなくても大丈夫ということなのでしょうか? PDOの場合 $sql = 'INSERT INTO member SET id=?, message=?'; $stmt = $db->prepare($sql); $stmt->execute(array($id, $message)); 色々調べてみたのですがいまいち分からないためよろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQLでshal()関数のエラーがでます

    Fatal error: Call to undefined function shal() in C:\xampplite\htdocs\HP2\join\check.php on line 14 とエラーがでてきます。 原因がわからなくて困っています。 どなたか回答よろしくお願いします。 if (!empty($_POST)) { //登録処理をする $sql = sprintf('INSERT INTO members SET name="%s", email="%s", password"%s", created"%s"', mysql_real_escape_string($_SESSION['join']['name']), mysql_real_escape_string($_SESSION['join']['email']), shal(mysql_real_escape_string($_SESSION['join']['password'])), date('Y-m-d H:i:s')); mysql_query($sql) or die(mysql_error()); unset($_SESSION['join']); header('Location: thanks.php'); } ?>

    • ベストアンサー
    • MySQL
  • mysql_real_escape_string

    独学数ヶ月の初心者の質問で恐縮です。 もろもろの事情で仕方なくmysql_real_escape_stringを 以下(1)のように使用しなくてはならないと仮定し、 セキュリテイの面で(2)のようにシングルクオテーションつける 事で危険を回避できますか? またシングルクオテーションは(2)のようにつけてはいけない とかありますか?(記述の基本が曖昧なため、ただの確認の質問) (1) $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id", mysql_real_escape_string($id), mysql_real_escape_string($password)); (2) $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id", ’mysql_real_escape_string($id)’, ’mysql_real_escape_string($password)’); よろしくお願いします。

    • ベストアンサー
    • MySQL
  • html用とmysql用のエスケープ処理の両立方法

    一度htmlspecialcharsしたものをmysql_real_escape_stringしてはいけない、そうです。 下記のように$pageをブラウザに表示もして、mysqlでも使う場合はどうするのでしょうか。 先にmysql_real_escape_stringを使い終わった後に、 htmlspecialcharsを使うような構造になるように工夫するのでしょうか。 htmlspecialcharsは出力する直前に使用しなければならないですが、 mysql_real_escape_stringは直前でなくても構わないとのことなので そこも意識して・・・ $mysql = mysql_connect($HostName,$UserName,$Password); $page = mysql_real_escape_string($_GET['page']); $mysql_c = "SELECT * FROM tttttt WHERE page='$page'"; $mysql_q = mysql_query($mysql_c,$mysql); $page = htmlspecialchars($_GET['page']); $html = '<a href="?page='.$page.'">'.$page.'</a>'; <html> <body> <div><?php echo $page; ?></div> 他には方法がないのでしょうか。

    • ベストアンサー
    • PHP
  • エラーの意味と対策

    PHP-MySQL間でデータを更新するプログラムを作成、PHPファイルを 読み出し更新を行おうとしたところ、以下のメッセージが表示されました。 データの更新はできているのですが、このメッセージがよくわかりません。 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in E:\(ディレクトリ)\delete.php on line 106 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in E:\(ディレクトリ)\delete.php on line 106 ここに書かれているコードはSQLで $sql_update = "UPDATE ITEM SET DELETE_FLAG=1,LASTUPDATE_USER='".htmlspecialchars(mysql_real_escape_string($_COOKIE["loginuser"]),ENT_QUOTES)."',LASTUPDATE_DTTM=NOW() WHERE ITEM_ID=".$key; となっています。 今のところ「mysql_real_escape_string」をはずすとエラーが出ないのですが、 エラーの意味、原因、対策についてコメントいただければと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【php】改行にエスケープ文字が入る

    phpで  $_GET['a'] = stripslashes($_GET['a']); $_GET['a'] = mysql_real_escape_string($_GET['a']); $_GET['a'] → インサート と途中に stripslashes mysql_real_escape_string をはさんでから GETやPOSTを取得してるんですが改行が改行コードに変わってしまいます。 例えば質問フォームとかで  ---------------------------------------- 質問内容 ---------------------------------------- なんたら かんたら  ↓ サブミット ---------------------------------------- 投稿確認 ---------------------------------------- なんたら\n\rかんたら みたいなかんじです。 一旦文字コードをEUCにかえてから mysql_real_escape_stringを挟んだりしたりもしてみてますが 改行が改行コードになってしまいます。

    • ベストアンサー
    • PHP
  • mysql危険回避(1 OR effective)

    mysqlの危険回避の質問です。 (私がした1つ前に質問したものでは、解決しなかったので再度表現を変えて行います。) mysqlでwhere句の値に 1 OR effective=0 が入ると危険であり、シングルクオテーションで回避できる、とあるサイトでみました。 それを踏まえ、それまで以下の(1)で動いていたものを(2)にしたら、動かなくなりました。 そこで質問です。 (初めてphpに触れた人に教えるレベルで、かなり噛み砕いて教えていただけたら幸いです。) ■(1)はそのままでは危険という認識でよろしいですか? ■(2)はなぜ動かないのでしょうか? ■(1)を危険のない(もしくは可能な限り危険のない)書き方をするとしたらどうしたら いいでしょうか?(PDOで書く事!やmysqliがいい、というのは知っています。 どうしてもmysql_real_escape_stringを使わなくてはいけないという条件があったと 想定して強引にやるとしたらどうか、という事でお答えをいただければと思います。) (1) $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id", mysql_real_escape_string($id), mysql_real_escape_string($password)); (2) $id = "'" . mysql_real_escape_string($id) . "'"; $password = "'". mysql_real_escape_string($password) . "'"; $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id",$id , $password ); よろしくお願いします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう