0

我的网站没有 SSL,我需要将信用卡号从一个页面传递到另一个页面。场景是这样的。

  1. 我会检查信用卡号码(这是一个有效的号码)
  2. 然后我会将值发布到另一页 response.php
  3. 帖子值应该从 index.php 加密,我应该能够在下一页(response.php)中解密它

    <script type="text/javascript">
    function validate(payment_form){
    var error="";
    
    if(trim(payment_form.credit_card_number.value).length==0){
    document.getElementById("credit_card_number_error").innerHTML="Enter Credit Card Number";
    error+= false;
    }else{
    if(IsNumeric(payment_form.credit_card_number.value)==false){
    document.getElementById("credit_card_number_error").innerHTML="Enter numeric values";
    error+= false;
    }
    else{
    document.getElementById("credit_card_number_error").innerHTML="";
    error+= "";
    }
    }
    
    if(error==""){
    return true;
    }
    else{
    return false;
    }
    }
    
    
    function IsNumeric(strString)
    {
    var strValidChars = "0123456789.-";
    var strChar;
    var blnResult = true;
    if (strString.length == 0) return false;
    for (i = 0; i < strString.length && blnResult == true; i++)
    {
    strChar = strString.charAt(i);
    if (strValidChars.indexOf(strChar) == -1)
    {
    blnResult = false;
    }
    }
    return blnResult;
    }
    
    </script>
    
    
    
    <form id='payment-form' name="payment_form" onSubmit="return validate(this)" action='response.php' method='POST'>
    <table>
    <tr><td>Credit Card Number</td><td><input type="text" placeholder="Credit Card Number" value="" id="credit_card_number" name="credit_card_number"></td><td><label class="error" id="credit_card_number_error"/></td>
    <tr><td></td><td><input type="submit" value="PAYMENT" class="login" id="payment" name="payment"></td></tr>
    </table>
    </form>
    

总而言之,我正在使用一个表格来发布信用卡号,它需要被编码,我将能够在下一页中对其进行解码。这可能吗。

4

3 回答 3

4

如果没有 SSL 和“真实”证书,即由受信任的证书颁发机构签名,就不可能安全地做你想做的事。

  • 如果使用对称加密,客户端必须知道密钥,因此攻击者可以通过简单的窃听轻松获取密钥。通过更多的窃听,他可以捕获加密的信用卡号并立即解密。
  • 如果您使用非对称加密,攻击者可能会执行您甚至无法检测到的中间人攻击(即,攻击者用他自己的公钥替换公钥,您将数据加密给他,他将其解密,读取数据,使用服务器发送的真实公钥重新加密;使用 SSL 和“真实”证书,浏览器将能够区分真实公钥和攻击者的公钥)!

拜托,拜托,拜托:除非您是一位大师(在这种情况下,您很可能正在开发算法,而不是制作网站),否则不要试图在安全/密码学方面发挥创造力。很可能你会建造一些严重损坏的东西。

带有“真实”证书的 SSL 之所以安全,是因为这些证书是由证书颁发机构签署的,这将使您的浏览器将它们识别为有效。如果它们没有由浏览器认可的证书颁发机构签名,它将显示一个可怕的屏幕,告诉用户他可能受到了攻击。攻击者无法为您的域的证书生成有效签名。

去买个证书。我最近将我的域转移到了一个新的注册商,他们以 1.99 美元的价格向我提供了为期 1 年的 SSL 证书(这不太好——我的 Android Chrome 无法识别 CA;但是...... 1.99 美元......)

于 2013-06-21T07:35:21.893 回答
0

使用本地存储保存 CC 编号,这样就不需要发送到服务器。

localStorage.ccnum = num;

var num = localStorage.ccnum;
于 2013-06-21T08:02:48.197 回答
0

如果您使用 SSL,它总是会很好。但是考虑到你想对你自己的 PHP/JSP 页面进行 AJAX 调用,那么你可以做一个技巧。

诡计:

选项#1:使用简单的 String.replaceAll 方法用算法中的字母替换所有数字字符。例如,您将所有“1”替换为“a”,将所有“2”替换为“b”。或者你可以用其他方式来做。即 '1' 替换为 'z' , '2' 替换为 'y' 等。

选项#2:您可以使用随机字符生成器来获取唯一的 10 个字符。每个为一个单独的号码。然后在您的 ajax 调用中,您需要传递随机生成的字符串(长度为 10)。然后您的 PHP 或 JSP 页面将使用相同的算法来解密信用卡号。

方法 2 更安全,因为它总是随机的。这可以通过以下方式变得更加安全:您首先进行 ajax 调用以要求您的 PHP/JSP 页面生成 10 个字母(每个字母代表一个数字)并将其存储在 DB 或会话中的某个位置。然后它将密钥或索引返回到存储的 10 个字母,并且在您的 AJAX 调用中,您将不会传递实际的加密算法字符串。因此,没有人能够理解正在发生的事情。

于 2015-09-04T03:24:57.427 回答