【问题标题】:Pass form data encrypted, but visible in URL传递加密的表单数据,但在 URL 中可见
【发布时间】:2014-04-18 22:38:41
【问题描述】:

所以我已经管理了如何解码和编码,这是通过 2 个函数完成的。 所以这里是例子

http://goldextra.com/b/id_color.php

如果您输入一个单词,它将被编码,如结果页面所示。 所以如果一个输入 = testword 网址将是 http://goldextra.com/b/balloony.php?name=testword

问题是,我希望 url 看起来像这样 http://goldextra.com/b/balloony.php?name=k484z52646w5i474 (当然网站本身不应该显示加密,而是字)

我必须如何更改我现在拥有的代码,我是否必须更改表单站点或结果站点中的代码?

表格代码

 <form action="balloony.php" class="sign-up" method="get" class="sign-up">
<h1 class="sign-up-title">Whats the word?</h1>
<input type="text" class="sign-up-input" placeholder="Enter your baloony" name="name" autofocus>
<input type="submit" value="baloony it!" class="sign-up-button">

结果网站

<?php
function encode($string,$key) {
$key = sha1($key);
$strLen = strlen($string);
$keyLen = strlen($key);
for ($i = 0; $i < $strLen; $i++) {
    $ordStr = ord(substr($string,$i,1));
    if ($j == $keyLen) { $j = 0; }
    $ordKey = ord(substr($key,$j,1));
    $j++;
    $hash .= strrev(base_convert(dechex($ordStr + $ordKey),16,36));
}
return $hash;
}

function decode($string,$key) {
$key = sha1($key);
$strLen = strlen($string);
$keyLen = strlen($key);
for ($i = 0; $i < $strLen; $i+=2) {
    $ordStr = hexdec(base_convert(strrev(substr($string,$i,2)),36,16));
    if ($j == $keyLen) { $j = 0; }
    $ordKey = ord(substr($key,$j,1));
    $j++;
    $hash .= chr($ordStr - $ordKey);
}
return $hash;
}
?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><? echo htmlspecialchars($_GET["name"]) . '!'; ?></title>
<style type="text/css">
.BIG {
    font-size: 250px;
font-weight: bold;
font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif;
text-align: center;
}
</style>
</head>
<body class="BIG">


<?php
$name = htmlspecialchars($_GET['name']); 
$urlENC = encode( $name ,"whateverkey"); 
$urlDEC = decode( $urlENC ,"whateverkey"); 
echo htmlspecialchars($_GET["url"]) . '';
echo $urlENC; ?>
<br />
<? echo $urlDEC; ?>

【问题讨论】:

  • 您需要 javascript 来对表单提交的值进行编码。但具体目的是什么?如果它是安全的,使用 ssl 是一个更好的选择。
  • 你想要实现的目标几乎毫无意义,但我想最直接的方法是创建一个 javascript 函数来加密你需要的东西:)
  • 好的,我希望 URL 包含表单中的信息,以便人们可以复制粘贴 LINK。但我不希望人们只通过查看 url 就知道内容是什么。 @Kei我怎么能准确地实现那个功能? (作为菜鸟我还是……)

标签: php forms encryption getmethod


【解决方案1】:

所以是的,您需要使用 javascript 来执行此操作,但您不能使用 SHA,因为它会生成哈希,并且您将无法在服务器端取回您的数据。 对于我的示例,我将使用十六进制,这不是很安全(解码非常简单):

Javascript 函数:

function stringToHex (tmp) {
    var str = '';
    var tmp_len = tmp.length;
    var c = 0;
    for (var i=0; i < tmp_len; i++) {
        c = tmp.charCodeAt(i);
        str += c.toString(16);
    }
    return str;
}

在发布之前在您的参数上使用它。

现在,PHP 方面:

function hexToStr($hex){
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2){
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
}

你去。

【讨论】:

  • 顺便说一句,我从未设法以任何可行的方式使用您提供的代码。您认为您可以发布表单和结果网站的完整代码吗?
  • 你一定是在开玩笑。你 7 个月前问过这个问题,现在你告诉我它不起作用?另外,你想让我做所有的工作?!我很确定你甚至没有尝试过。
  • 好吧,我确实尝试过,即使是在您发布后立即尝试。我只是忘了告诉你它不起作用,或者至少我没有管理......(当时我也不太了解这个论坛以及如何以及何时发表评论)如果冒犯了你,请见谅。跨度>
  • 显然你突然发现我原来的问题本身不清楚/没用,因为你在回复它 7 个月后投了反对票。不管怎样:我相信你知道你在做什么。和平。
猜你喜欢
  • 2014-06-14
  • 2012-02-16
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多