No.4ベストアンサー
- 回答日時:
補足質問の回答です。
$param = ctype_alnum($_POST['id_posted']) ? $_POST['id_posted'] : some_error_handling();
また、恥ずかしながら私はPHPに関しては初心者でsome_error_handling()を初めて目にします。これはいったいどのような働きを行うのでしょうか?よろしくお願いいたします。
混乱させたようで、申し訳ありません。
some_error_handling()は
何かエラー処理を実行してくださいという意味ですので、デフォルトの関数でもありませんし、拡張モジュールの関数にもありません。
ctype_alnumで書くとしたら
例えば、HTMLのフォームに
<input type="text" name="user_name" value="" />
のようにあった場合、受け取り側のPHPファイルでは
<?php
/* 初期化 */
$username = "";
/* 配列をPOSTされた場合の処理 */
$_POST['user_name'] = (string)$_POST['user_name'];
if(ctype_alnum($_POST['user_name'])===true){
$username = $_POST['user_name'];
} else {
/* ここでエラー処理をする、 */
/* 例えば、
再度入力画面に戻る、
*header()でリダイレクトさせる、または
*include(入力画面用.php)など
又は、処理を中断する、
exit();
又は、デフォルトの値を
$usernameに代入するなどの処理を
書けばいいと思います。
(ユーザー名やパスワードの場合はデフォルト値を
入れることはないと思いますが・・・・)
*/
}
?>
No.6
- 回答日時:
DBはMySQLなんですね。
mysql_escape_string は正しく使えばもちろん効果はありますが、1つの漏れもなく、ただしく使う必要があります。
ですから、PEAR をおすすめしています。
参考URLに挙げたサイトなど、PEARについて調べましたか?
PEARに限らず、プレースホルダのような機能を使わずに、SQLインジェクションを防ぐことは、かなり慣れたプログラマでも困難なことです。
回答ありがとうございました。
すいません、DBはMySQLです。
PEARは以前から興味がありいじっていたのですがSQL Injection対策に有効とは知りませんでした。
ありがとうございました。
No.5
- 回答日時:
失礼ながら、まだPHP、データベース共に知識が深くないように見受けられます。
それなら、PEARのような既に実績のあるライブラリを使うことをおすすめします。
PEARのプレースホルダーの機能を使えば
$query = "SELECT * FROM ACCOUNT WHERE ID = ? AND PASS = ?";
$result = $con->getAll($query, array($UID,$PASS));
のように、エスケープの処理を一切考えずにクエリを書くことができ、使用するDBに併せて、PEARが適切にサニタイジングしてくれます。
すべてのクエリにプレースホルダを使うと決めてプログラミングするとSQLインジェクションについては、回避できます。
参考URL:http://kamakura.cool.ne.jp/oppama/oswa/phppeardb …
No.3
- 回答日時:
エスケープでは対処しきれない場合があります。
個々のフィールドに対するctypeやcastを使う方法もいいかもしれません。
例えばIDカラムには通常数字が入り、
ポストされる文字も数値を期待しているのであれば
$param = ctype_digit($_POST['id_posted']) ? $_POST['id_posted'] : some_error_handling();
又は、
$param = (int)$_POST['id_posted']
などでも出来ると思います、
文字列ならば、単純に
使用不可能の文字を発見した時点で
もう一度入力画面に戻るかデフォルトのクエリーを
発行するのがいいのでは?この場合は"'"
この回答への補足
回答ありがとうございます。
$param = ctype_digit($_POST['id_posted']) ? $_POST['id_posted'] : some_error_handling();と書いていただきましたが、もし渡される値が英数字の場合はどうなるのでしょうか?
私なりに調べ考えてみた結果以下のようになりました。
$param = ctype_alnum($_POST['id_posted']) ? $_POST['id_posted'] : some_error_handling();
また、恥ずかしながら私はPHPに関しては初心者でsome_error_handling()を初めて目にします。これはいったいどのような働きを行うのでしょうか?よろしくお願いいたします。
No.2
- 回答日時:
参考URLにいろいろと議論されていますので、
覗いてみてはいかがでしょう。
あと、以下の記事が参考になるかと・・・
http://www.atmarkit.co.jp/fsecurity/special/30xs …
参考URL:http://vsug.jp/tabid/63/forumid/56/postid/537/vi …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- 据え置き型ゲーム機 ps4ゲームのHDRについて 2 2022/05/04 14:15
- WordPress(ワードプレス) Wordpressをハッキングされない方法 4 2022/06/11 04:15
- Access(アクセス) Access VBAで条件を追加する(書き込む)場所 2 2022/03/23 12:05
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- WordPress(ワードプレス) Wordpress 複数プラグインの不具合? 1 2022/10/09 21:52
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
- 大学受験 関西外国語大学の国際共生学科、英米語学科(Super IESプログラム)、大阪外語専門学校、同志社大 1 2023/03/29 22:34
- その他(Microsoft Office) Excelの関数(FILTER関数)について教えてください 2 2023/07/31 16:11
- 車検・修理・メンテナンス 車両盗難対策について 2 2022/10/03 14:07
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
POSTの項目に追加
-
MAMPでphpのモジュールSpreadsh...
-
phpで変数を使ってcopyできない
-
fputcsv()で1レコード1行になる...
-
foreachがうまく動かない
-
VBA で、スペースを含むファイ...
-
PHPからHTMLへの変数の受け...
-
プログラミングC++のmapについて
-
PostgreSQLに書き込むことが出...
-
HTMLで前の画面に戻る時、入力...
-
入力フォーム→確認画面→送信画...
-
PHPで画像の渡しが上手く行きま...
-
複数のセレクトボックスを1つに...
-
<input type="hidden" >で配列...
-
検索時の選択内容を保持する方法
-
アマゾンのような評価の星を選...
-
JavaScript変数をPHPへ渡す
-
$_SESSIONについて教えて下さい。
-
ボタンをクリックでPHP文を実行
-
現在時刻を反映させた時刻のプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複を防ぐ記述について教えて...
-
VBA で、スペースを含むファイ...
-
PHPで入力フォームでデータを確...
-
Flaskでサーバー立ち上げに関して
-
phpで変数を使ってcopyできない
-
PHPからHTMLへの変数の受け...
-
ファイル名を変更してアップロ...
-
$_SESSIONに渡した後はそのまま...
-
テキストボックスの値を取得したい
-
openCVのトラックバーについて
-
scanfでの読み込み文字数制限
-
PHP MySql 画像を取得
-
アップロードファイル名の文字化け
-
Fortranでのファイル名操作につ...
-
ポインタ配列をfscanfで読み込...
-
WordのIDataObject::GetData呼...
-
UPDATEできない
-
C# 同じ処理をまとめたい
-
イタリア人がCatherineと聞いた...
-
mySQLのデータを多次元配列に格...
おすすめ情報