COSMO BALLOON

ふくらむステキデイズ
<< September 2018 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 >>

スポンサーサイト

一定期間更新がないため広告を表示しています

- | - | -

[PHP] magic_quote_gpc

PHP_INI_PERDIRやPHP_INI_SYSTEM になっているPHPオプション

ini_set("magic_quotes_gpc",1);
等としても、反映されない。

----------------------------------------------
ini_set("magic_quotes_gpc",1);
print get_magic_quotes_gpc();
----------------------------------------------
とすると、「1」が返されるンだけど、試しに「ソフト」という文字列をPOSTしてみたところ、クオートされないので、注意!
※環境によっては違うかもわからんけど、Linuxではそうなるくさい。

ということは、スクリプト中の後々のフラグメントに全く使えなくなってしまうので、
----------------------------------------------
ini_set("magic_quotes_gpc",1);
----------------------------------------------
などなど、PHP_INI_ALLとなっていない項目について、ini_setでいじっちゃだめ。

magic_quote_gpc

いろんなところで、offにして、必要なときにaddslashes($arg)したほうがよいとの話でずーっと気になりながらも、あやふやなままになっていたので、ちょっと検証(↑)。
やっぱり offをデフォルトと考えて、DBへ接続する場合のみに addslashes()したほうが、もし、magic_quote_gpcがonのサーバなんかにあたったときも、プログラムの変更する場所が少なくなってよさそうだ。

サーバの設定がいじれる場合は、全然問題ないけど、いじれない場合の処置

共有サーバ用のプログラム等で、magic_quote_gpc が onの場合
---------------------------------------------------------------------------------
/* magic_quotes_gpcがonの場合の処理
* $_POST,$_GET、$_COOKIE情報からバックスラッシュを削除する
*/
if(get_magic_quotes_gpc()){
$_GET = array_map("strip_text_slashes",$_GET);
$_POST = array_map("strip_text_slashes",$_POST);
$_COOKIE = array_map("strip_text_slashes",$_COOKIE);
}
function strip_text_slashes($arg){
if(!is_array($arg)){
$arg = stripslashes($arg);
}elseif(is_array($arg)){
$arg = array_map("strip_text_slashes",$arg);
}
return $arg;
}
------------------------------------------------------------------------------
コンフィグ系の全部でインクルードするファイルに上記を追記することを試してみる。なんだかうまくいきそう。※処理おそくなるけど(W

DBへポストするときは、
------------------------------------------------------------------------------
function add_text_slashes($arg){
if(!is_array($arg)){
$arg = addslashes($arg);
}elseif(is_array($arg)){
$arg = array_map("add_text_slashes",$arg);
}
return $arg;
}
-----------------------------------------------------------------------------
をDBヘポストする前の配列に
$data = array_map("add_text_slashes",$data);
かましてあげればよいと思われる。

ハッ!!! どっちも再帰してるから・・・呼び出すときにわざわざarray_map しなくてもよいかも・・・・
$_POST = strip_text_slashes($_POST);
でもいけそうな予感・・・。

というよりも、POST、GET、COOKIEを処理するwrapperを作ったほうが今後のためによさそうでもある。ActionScriptみたくファンクション上書き出来ちゃえば楽なのにな。

スポンサーサイト

- | - | -
トラックバック
この記事のトラックバックURL
http://seitoman.jugem.jp/trackback/155
 

Copyright (C) 2004 paperboy&co. All Rights Reserved.

Powered by "JUGEM"

 
RECENT COMMENT
RECENT TRACKBACK
PROFILE