2011-08-09 13 views
2

magic_quotes_gpcoffに設定されている場合、Magentoはアポストロフィをエスケープしています。 magic_quotes_gpconに設定すると、Magentoはスラッシュの挿入を停止します。それは完全に後方です。magic_quotes_gpcがオフに設定されているときに引用符がエスケープされる

私はMagentoのは、私のアポストロフィをエスケープすることはできませんが、私はそれが私のサイトの他の部分で持っているかもしれません意味合い(vBulletinによってフォーラム、Wordpressのブログなどが心配ですので、私はまたonmagic_quotes_gpcセットを持っている必要はありません。 )。

ちょうど注意してください - Magentoは常にこのように動作していたわけではありません。

EDIT:行動は私のCMSのページのいずれかのレイアウト更新XMLに次のコードを追加した後に開始しました:

<!--<reference name="content"> 
<block type="catalog/product_new" name="home.catalog.product.new" alias="product_new" template="catalog/product/new.phtml" after="cms_page"><action method="addPriceBlockType"><type>bundle</type><block>bundle/catalog_product_price</block><template>bundle/catalog/product/price.phtml</template></action></block> 
<block type="reports/product_viewed" name="home.reports.product.viewed" alias="product_viewed" template="reports/home_product_viewed.phtml" after="product_new"><action method="addPriceBlockType"><type>bundle</type><block>bundle/catalog_product_price</block><template>bundle/catalog/product/price.phtml</template></action></block> 
<block type="reports/product_compared" name="home.reports.product.compared" template="reports/home_product_compared.phtml" after="product_viewed"><action method="addPriceBlockType"><type>bundle</type><block>bundle/catalog_product_price</block><template>bundle/catalog/product/price.phtml</template></action></block> 
</reference> 
<reference name="right"> 
<action method="unsetChild"><alias>right.reports.product.viewed</alias></action> 
<action method="unsetChild"><alias>right.reports.product.compared</alias></action> 
</reference>--> 

奇妙な行動を開始した後、私はそのコードを削除し、それが解決しませんでした問題。

+0

今日、あなたはどのようにサーバーを変更しましたか?このようなことは一般的に自発的に起こるわけではありません。また、どのようにこれをテストしています。再現しようとするサンプルコード? – Nick

+0

サーバー上の何も変更されていません。変更の直前に行った唯一のことは、CMSページのレイアウト更新XMLにコードを追加することでした。上記のコードを追加しました。その前に、クローラがこのCMSページに到達するのを防ぐために、robots.txtに軽微な変更を加えました。その変更後もすべてが正常に機能し続けました。 – Nick

答えて

4

EDIT:問題を把握しました。 Wordpressにはスラッシュを追加する機能があることが判明しました。 Wordpressバージョン3.2.1では、/wp-includes/load.phpの530行目に関数wp_magic_quotes()があります。

問題を解決するために、関数内のすべてのコメントを付けました。定義されていない関数への呼び出しを防ぎます)。それはエスケープされた引用符の問題を取り除いたものです。私は広範なテストを行っていませんが、わかっていることから、古いWordpressプラグインが壊れる可能性があるので注意してください。

それはここから行く:アプリ/コード/コア/メイジ/コア/のfunctions.phpの上部にこれがある

function wp_magic_quotes() { 
    // If already slashed, strip. 
    /*if (get_magic_quotes_gpc()) { 
     $_GET = stripslashes_deep($_GET ); 
     $_POST = stripslashes_deep($_POST ); 
     $_COOKIE = stripslashes_deep($_COOKIE); 
    } 

    // Escape with wpdb. 
    $_GET = add_magic_quotes($_GET ); 
    $_POST = add_magic_quotes($_POST ); 
    $_COOKIE = add_magic_quotes($_COOKIE); 
    $_SERVER = add_magic_quotes($_SERVER); 

    // Force REQUEST to be GET + POST. 
    $_REQUEST = array_merge($_GET, $_POST);*/ 
} 
+0

これはうまくいくかもしれませんが、a)Wordpressコアにパッチを当てることは決して良いことではありません。またb)Magentoから独立してwordpressを使うつもりなら、GETとPOSTのHTTPパラメータでWordpressセキュリティ脆弱性を開こうとしています。Magentoの一部としてWordpressを使用している場合は、フラグを設定してからwp_magic_quotes関数内で条件付きの戻り値を設定することもできます。これは大丈夫かもしれません。 – Willster

+0

@Willster私はmagentoの一部としてwordpressを使っているので、これで展開することができます。私は上記と同じ問題を経験しています。私は、マゼンタが壊れるのを防ぐ方法でこれを設定する方法を学ぶことに非常に興味があります。 –

0

:これまで

function wp_magic_quotes() { 
    // If already slashed, strip. 
    if (get_magic_quotes_gpc()) { 
     $_GET = stripslashes_deep($_GET ); 
     $_POST = stripslashes_deep($_POST ); 
     $_COOKIE = stripslashes_deep($_COOKIE); 
    } 

    // Escape with wpdb. 
    $_GET = add_magic_quotes($_GET ); 
    $_POST = add_magic_quotes($_POST ); 
    $_COOKIE = add_magic_quotes($_COOKIE); 
    $_SERVER = add_magic_quotes($_SERVER); 

    // Force REQUEST to be GET + POST. 
    $_REQUEST = array_merge($_GET, $_POST); 
} 

if (get_magic_quotes_gpc()) { 
    function mageUndoMagicQuotes($array, $topLevel=true) { 
     $newArray = array(); 
     foreach($array as $key => $value) { 
      if (!$topLevel) { 
       $newKey = stripslashes($key); 
       if ($newKey!==$key) { 
        unset($array[$key]); 
       } 
       $key = $newKey; 
      } 
      $newArray[$key] = is_array($value) ? mageUndoMagicQuotes($value, false) : stripslashes($value); 
     } 
     return $newArray; 
    } 
    $_GET = mageUndoMagicQuotes($_GET); 
    $_POST = mageUndoMagicQuotes($_POST); 
    $_COOKIE = mageUndoMagicQuotes($_COOKIE); 
    $_REQUEST = mageUndoMagicQuotes($_REQUEST); 
} 

ジャスト(ローカルアプリ/コードにこのファイルをコピー/local/Mage/Core/functions.php)、常に実行するようにif文をコメントアウトします。

// if (get_magic_quotes_gpc()) { 
    function mageUndoMagicQuotes($array, $topLevel=true) { 
     $newArray = array(); 
     foreach($array as $key => $value) { 
      if (!$topLevel) { 
       $newKey = stripslashes($key); 
       if ($newKey!==$key) { 
        unset($array[$key]); 
       } 
       $key = $newKey; 
      } 
      $newArray[$key] = is_array($value) ? mageUndoMagicQuotes($value, false) : stripslashes($value); 
     } 
     return $newArray; 
    } 
    $_GET = mageUndoMagicQuotes($_GET); 
    $_POST = mageUndoMagicQuotes($_POST); 
    $_COOKIE = mageUndoMagicQuotes($_COOKIE); 
    $_REQUEST = mageUndoMagicQuotes($_REQUEST); 
// } 

マジッククオートが無効になっている、それがあれば、それはとにかくマジッククオートを実行している場合これは、WordPressのチェックがあるため必要になります。これが起こるかどうかについての議論が長引いていますが、コンセンサスは、その機能が古いプラグインやそれを回避できないテーマのセキュリティホールを開く可能性があるため、WordPressがすぐにその機能を削除することを期待しないでください。

関連する問題