【问题标题】:Hide url header redirect parameters using session使用会话隐藏 url 标头重定向参数
【发布时间】:2013-12-30 11:04:15
【问题描述】:

我有以下 php 代码

<?php

    $token_cipherText=$_POST['tokenex_cipherText'];
    $token=generateToken($tokenex_cipherText);  
    $merchantid="example";
    $Password="example1";
    $remoteIP='11.22.95.5';
    $customerReferenceNo = $_POST['customerReferenceNo'];
    $amount=$_POST['amount'];
    $currencyCode='356';

    $expiryMonth=$_POST['expiry_month'];
    $expiryYear=$_POST['expiry_year'];
    $securityCode=$_POST['cvv'];
    $cardHolderName=$_POST['name_on_card'];
    $cardType=$_POST['selectedRadioValue'];


       if($cardType=='radio1')
    {
        $cardType='CC';
    }
    if($cardType=='radio2')
    {
        $cardType='DB';
    }   


    $cardProvider=$_POST['ccType'];
    if($cardProvider=='visa_electron')
    {
        $cardProvider='visa';
    }
    if($cardProvider=='mastercard')
    {
        $cardProvider='mc';
    }
    if($cardProvider=='maestro')
    {
        $cardProvider='maest';
    }
    if($cardProvider=='sbi_maestro')
    {
        $cardProvider='sbime';
    }
    $cardProvider=strtoupper($cardProvider);

    $name=$cardHolderName;
    $mobileNo=$_POST['mobileNo'];
    $Email=$_POST['email'];
    $merchant_id=$_POST['merchant_id'];

    $sql=mysql_query("select * from card_token where token='$token'");
    $numrows=mysql_num_rows($sql);
    if($numrows==0)
    {
        $sql=mysql_query("insert into card_token value('','$token','$merchant_id',now())");
    }

    $sql=mysql_query("update payment_tools_transactions set token_id='$token', cardHolderName='$cardHolderName', cust_Email='$Email', mobileNo='$mobileNo', trans_type='$cardType', cardProvider='$cardProvider', trans_amount='$amount' where trans_refNo='$customerReferenceNo'");

    $checksum = $merchantid."|".$_POST['amount']."|".$customerReferenceNo;  
    $checksum = hash('sha256', $checksum);  
    $data='tokenNo='.$token.'&securityCode='.$securityCode.'&cardExpiryMonth='.$expiryMonth.'&cardExpiryYear='.$expiryYear.'&cardHolderName='.$cardHolderName.'&transactionAmount='.$amount.'&paymentMode='.$cardType.'&currencyCode='.$currencyCode.'&customerReferenceNo='.$customerReferenceNo.'&cardProvider='.$cardProvider.'&name='.$name.'&mobileNo='.$mobileNo.'&email='.$Email.'&password='.$Password.'&amount='.$_POST['amount'].'&remoteIP='.$remoteIP.'&checkSum='.$checksum;

    $encryption_key = "CE5D964";
    $desEncryptedData = encryptText_3des($data, $encryption_key);
    $desEncryptedData = urlencode($desEncryptedData); 

    $url='https://payment.paykml.com/PGCCDCToken/TokenPayment.jsp?merchantId='.$merchantid.'&data='.$desEncryptedData;    //URL for CC authentication   
    header("location:$url");

一个html表单将一些值发布到这个php中,上面的代码被执行并使用标题header("location:$url");这些参数被重定向到$url='https://payment.paykml.com/PGCCDCToken/TokenPayment.jsp?merchantId='.$merchantid.'&amp;data='.$desEncryptedData;

但我面临的问题是,重定向 url 像 https://payment.paykml.com/PGCCDCToken/TokenPayment.jsp?merchantId=example&amp;data=********** 一样暴露

任何人都可以操纵或轻松获取此值。有什么方法可以通过使用会话来隐藏此参数?或者有没有其他方法可以隐藏此 url 重定向参数?

有人可以帮忙吗?我一直在到处寻找解决方案,但在 vien :(

解决方案: 由于我们正在重定向到第三方网站,因此无法在此处使用会话。所以我使用 curl 将我的参数发布到该网站

//Copy paste all the code till here...
    $encryption_key = "CE5D964";
    $desEncryptedData = encryptText_3des($data, $encryption_key);
    $desEncryptedData = urlencode($desEncryptedData); 


    $url='https://payment.paykml.com/PGCCDCToken/TokenPayment.jsp?merchantId='.$merchantid.'&data='.$desEncryptedData; 
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    //curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    $auth = curl_exec($curl);
    if($auth)
    { 
    header("Location:success.php"); //Redirect to a success page after payment.
    exit;
    }

【问题讨论】:

  • 是的,您可以将它们存储在 session/cookies 中并轻松将它们放入重定向页面中。
  • 访问该页面的用户是否重要?如果只是需要访问它,为什么不在上面运行file_get_contents
  • thanks.but 我没有参加过会议,我不知道 flw.ca 的工作你帮帮我

标签: php html session redirect header


【解决方案1】:

如果 paykml.com 是您自己网站的一部分,那么您可以使用 $_SESSION vars。如果您发布到第三方支付处理公司,则安全性取决于他们的设置方式,您不能使用$_SESSION vars。我会担心将值传递给您上面的表单的数据输入表单。如果您是在上述表格中发布信用卡信息的人,那么您应该使用 SSL。 $_SESSION 不会帮助你。查看here,了解有关在您的网站上接受信用卡信息的信息。


使用 stream_context_create 和 fopen()。此代码改编自here. 我没有测试过这个,所以不知道它是否会起作用,但你可以从这里开始。

<?php    
$options = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>
      "Accept-language: en\r\n".
      "Content-type: application/x-www-form-urlencoded\r\n",
    'content'=>http_build_query(array("merchantId"=>$merchantid,'data'=>$data))
));

$context = stream_context_create($options);

$result = file_get_contents('http://paykml.com/PGCCDCToken/TokenPayment.jsp',false,$context);

?>

【讨论】:

  • paykml.com 是第三方支付处理公司。我没有向我这边的 php 发送数据的问题。它使用 post 完成。它也没有暴露。信用卡号码是标记化的在 html 本身中,因此它作为令牌发送到 php,我们无法解密,只能通过 www.paykml.com/..但是 kml.com 在他们的文档中将 Merchentid 和数据发布到他们的 url .但是我使用标头重定向发布。除了标头重定向之外,还有其他方法可以从我的 php 将数据发布到他们的 url 吗?
  • fsockopen 是另一种方式。你可以看到另一个例子here。最后一个链接还谈到了使用 curl,这是另一种选择。最好的办法是向 paykml.com 索取安全代码示例。
  • 还有一个选项是带有fopenfile_get_contents 的stream_context_create。我在上面添加了一些未经测试的代码给你一个例子。有关更多示例,请参阅这些函数的 php 文档。谷歌也会给你更多的例子。
  • 我会更新完整的代码。不幸的是,php 无法加载。我将更新我尝试过的完整 php
  • 我已经更新了我的代码并修复了 URL。我离开了页面。我还根据示例 here 将 fopen 更改为 file_get_contents
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多