拡張機能の非表示の値-エンコードデータトランザクションのエンコード


7

onepagecheckoutの興味深い拡張機能を見つけました。それは無料のようですが、拡張機能をインストールしたときに、コードが開発者サーバーにデータを送信およびエンコードしていることに気付きました。理論的には、ライセンス値の検証-なぜ無料なのか、また、サイトはサーバーに渡された非表示の値について何も伝えていないので、なぜだかわかりません。- それは無料です。

この特定の領域がクレジットカードに関する情報を管理しているという事実に基づいて、どの値が渡されているかを知りたいのです。私の調査では、サーバーに送信されるコードid=opc_s_dataが次の呼び出しで呼び出される行にあることがわかりました。

public function getSUrl($mode = '') {
    $code = Mage::getStoreConfig('onepagecheckout/sdatacode');
    eval(base64_decode($code));
    if(!isset($url))
        $url = '';
    return $url;
}

送信される値は次のようなものです:

<input type='hidden' id='opc_s_data'
    value='http://company.com/magento/opclicense/opcaction.php?sdata=bWFEuN......=='/

サーバーからアプリケーションに送信された情報をデコードするために何ができるか知っていますか?この非表示のIDを消去すると、onepagecheckoutが機能しません。

免責事項:私は開発者に手紙を書きましたが、返事がありませんでした。

回答:


16

まず第一に、これは醜いやり方です。おそらく最も醜い。ここに会社名を追加したくない場合は、追加します。それはinteriorwebdesign.comです。ほとんどの場合、サーバーに送信されるのは、magentoバージョン、拡張バージョン、およびWebサイトのURLです。それらに送信されbase64_decodesdataパラメーターの値で実行することにより、確認することができます。ライセンスが正しい場合はどうすればいいのかわかりませんが、エラーが発生した場合の応答は次のとおりです。

checkout.o_p_c_l_s = '2';
deljsphp();

コードでと呼ばれる関数を探しdeljsphpます。チェックアウトが無効になると思います。

[編集]
これらのタイプの拡張機能を見ると怒るので、調査に時間を費やすことにしました。
これが私が見つけたものです。リクエストの結果は、サーバー上のjsファイルまたはjsコードへのリンクになります。拡張子からjsファイルをデコードした後、私はこの関数を見つけました:

start: function () {
    this.s_code = $('opc_s_data').value;
    $('opc_s_data').remove();
    if (this.s_code == '') {
        this.opcdis();
        return false
    }
    addjsphp(this.s_code);
    this.getActionResults(0)
},

したがって、コード「license」が有効である場合、addjsphp次のように、いくつかのjsがDOMに追加されます。

function addjsphp(u) {
    var me = document.createElement('div');
    me.setAttribute('id', 'opcstataj');
    var p = 'html';
    var th1 = document.getElementsByTagName(p)[0];
    th1.appendChild(me);
    var th = document.getElementById('opcstataj');
    var s = document.createElement('script');
    s.setAttribute('language', 'javascript');
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('src', u);
    th.appendChild(s)
}

サーバーからのjsがどのように見えるかは(まだ)わかりませんが、試してみることができます。それが機能するかどうかわからない。jsファイルskin\frontend\base\default\js\onepagecheckout.pack.jsを編集し、ファイルの最後にこれを追加します。

function deljsphp(){
    return 1;
}

これdeljsphpにより、元の関数がオーバーライドされます。つまり、次のようになります。

function deljsphp() {
    var th = $('opcstataj');
    if (th && th != null && th != undefined) th.remove()
}

基本的に<script>、サーバーから追加されたタグを削除します。

その他の情報 質問で言及した行で評価されているコードは次のとおりです。

評価(gzinflate(BASE64_DECODE( 'jZAxb8MgEIXn + FfQCBl7qL1UHRLRDFGkLlWjOM0SVRHBV4NqwIKLqqrKfy84S9MuXeDgcd97BzWiI5xQVDrcPnSAT6IDi24HPmhni3KeUePaqyfP6 + VPWV2Jy5Nv0Hl48X1UJ5OMhqhPow3 / onE95xGXSteec2WFgXhQ51xIjEAuFcj3aaS2AkVsPIoA93cHsNK1UNAwGiZicQNmwM + CHprVZrfa7Nnjdrtu2GtJ8pz8ueWcM2dZuWAKcQhsNu4s0k6 + TwOoULFZXWuL4LXzH3BsIejOVtKZ2lw + pXaD7LUEGyCVl8jVoIZFSHE5q8bY80y / FWlAIJwThhCQlb + NeidFr1zA / 0K / AQ ==')));

さらに進んで...これは実際に評価されるコードです:

$mag = $this->getMagentoVersion(); 
$mod = $this->getOPCVersion(); 
$h = $this->getCurStoreUrl(); 
$s = "mag={$mag}&mod={$mod}&hname={$h}&action=check"; 
$data = base64_encode($s); 
$hs = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS']==='on')?'https':'http'; 
$url = $hs.'://interiorwebdesign.com/magento/opclicense/opcaction.php?sdata='.$data; 
if($mode == 'test') 
    $url = $hs.'://localhost/opclicense/opcaction.php?sdata='.$data;

これは、サーバーに何が送信されるかについての私の最初の疑いを裏付けています。


@Mariusどうもありがとう!素晴らしい分析、コードをチェックインします。彼らが選んだので名前を付けないようにします。醜いのは、この情報が取引されていることを人々に知らせておらず、コーディングのスキルがあまりない私にとっては混乱を招くからです。もう一度ありがとうございました。
s_h 2013

さらに、その無料の拡張機能は、検証するライセンスを付与していません。ライセンス.. brgds置くためのコード要求には置かない
S_H

base64-Stringをリモートで更新できないことを確認しますか?前回コードをチェックしたので、私はこのようなものを見ました。
ジラフ2014年

@giraff。実際はわかりませんが、私が見つけたものを書きました
マリウス

こんにちは、このモジュールの最近のバージョンでは、同じ「悪意のある」コードがありますか?
Simbus82

4

マリウス、調査をありがとう。私も、magentoモジュールの作成者がこれらのタイプの「在宅電話」を内線番号に広告することを非常に嫌い、思いとどまらせています。それらは暴露され、根絶されるべきである。

自宅電話を無効にし、onepagecheckout拡張機能を動作させ続ける(そうすることができます)には、次のようにします。

/skin/frontend/base/default/js/onepagecheckout.pack.jsファイルをテーマフォルダー/js/onepagecheckout.pack.jsにコピーし、http://jsbeautifier.org/のようなサイトを使用してコードを美化します。

ここで、startメソッドの244行目が表示されます。

addjsphp(this.s_code);
this.getActionResults(0)

に変更

//addjsphp(this.s_code);
//this.getActionResults(0)

これにより、スクリプトが常に遅いWebサイトに電話をかけるのを防ぎ、コード結果に対するアクションを停止します

これは機能するはずですが、展開する前にテストしてください。結局それはあなたのチェックアウトです


美しいものをありがとう。ページをパーソナライズするために、このスクリプトで多くのJSを変更する必要があり、パックのことで本当に行き詰っていました。
hellimac

1

私はこれを言いたいと思います regular code was just about to collect information on what version was used by our clients. No other information was collected.

バージョン3以降も削除されていwas released like about 1.5 years ago.ます。バージョン2をまだ使用している場合は、バージョン4.xにアップグレードしてください。


ご意見ありがとうございます。支払い領域にそのコードを見つけるのは奇妙でした。私はこの質問をほぼ2年前に行いました。
s_h
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.