PHP-隐藏网址(GET)参数

问题描述 投票:2回答:7

我在PHP / HTML中有这样的链接:

<a href="http://search.mywebsite.com/login.aspx?checktype=uid&user=adam&password=pass1234&profile=dart&defaultdb=kts"> Log me into this website </a>

当用户单击链接时,参数由第三方网站处理,该网站无缝地将用户登录。

是否可以隐藏/掩盖/伪装URL,以便用户在仍将参数传递到指定站点时看不到参数?

如果没有,你们会怎么做?我主要担心用户和密码参数,并需要隐藏它们。 (user = adam&password = pass1234)

我知道如何隐藏参数的唯一方法是使用表单发布方法时,但是在这种情况下,这不是一种选择,因为我使用的是直接链接。

编辑:对于那些一直建议使用POST方法的人,这不是一个选择,因为我没有使用表格,并且接收网站不受控制。我正在从一个站点登录到另一个(第三方)站点]

php post parameters get
7个回答
6
投票

您唯一的选择是使用表格和POST,如果您要登录的页面是由第三方控制的。

<form action="http://search.mywebsite.com/login.aspx" method="post">
   <input type="hidden" name="checktype" value="uid" />
   <input type="hidden" name="user" value="adam" />
   <input type="hidden" name="password" value="pass1234" />
   <input type="hidden" name="profile" value="dart" />
   <input type="hidden" name="defaultdb" value="kts" />
   <input type="submit" value="Log me into this website" />
</form>

EDIT:如果必须是链接,并且可能需要javascript,则可以使用javascript创建并提交form on the fly

<a href="#" onclick="postLogin()">Log me into this website</a>

<script type="text/javascript">
function postLogin() {
    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", "http://search.mywebsite.com/login.aspx");

    var params = {checktype: 'uid', user: 'adam', password: 'pass1234', profile: 'dart', defaultdb: 'kts'};
    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}
</script>

2
投票

请勿使用$ _GET传递任何个人,机密或重要数据。请改用$ _POST。

我不知道是什么阻止了您使用$ _POST,但是如果您仍然坚持使用它,请尝试md5()对这些数据进行编码,并在必要时进行验证。您始终可以使用$ _SESSION传递$ _POST登录数据以供进一步使用。


1
投票

同意并使用加密/哈希方法(例如MD5)。然后有一个重新处理页面,用于在调用所需脚本之前对消息进行解密。我正在用php ...只是为了向您展示这个想法。

例如www.mydomain.com/preporcessor.php?request=qouiapfiwe0i9qrr9qyy83r34rqejl

preprocessor.php(伪代码)

$request = $_REQUEST["request"];
$decrypted = mydecryptfunction($request);
//$decrypted will now contain: targetpage=login.php?username=abc&password=34453js&location=ABJ...
//Now you can route the parameters to login.php. 

请注意,mydecryptfunction($ request)是您将创建的函数。


0
投票

登录应该通过POST而非GET完成。此外,敏感细节应通过HTTPS发送。

创建安全登录功能的过程可能会写满一本书,因此,我建议您先阅读the definitive guide to web-based forms authentication

如果您对安全性还有其他特定问题,建议您在Security.SE进行尝试。


0
投票

您无法使用GET方法执行此操作。如果您向我们提供了更多信息,将很有帮助。您是否正在尝试从您的站点吸引用户登录另一个站点?在这种情况下,他们可能具有您可以检查的API。


0
投票

您可以为此功能生成令牌:在您的数据库中生成一个随机字符串:这是一个返回随机字符串的函数

function gt_rnd_str($min=2,$max=9){
    $str="";
    while (strlen($str)<$max) 
        $str.=rtrim(base64_encode(md5(microtime())),"=");
    return substr($str, 0, rand($min, $max));
}

现在使用用户名/ ID保存令牌,并使用它可以轻松为同一用户生成更多令牌,并轻松取消任何令牌。


0
投票

您可以将iframe与页面的URL一起使用,并对其设置样式以填充父级并删除边框。

    <!DOCTYPE html>
<html>
    <body>
        <iframe id="win" src="bookmarks_3_22_20.html" frameborder="0">
        </iframe>
        <script>
            this.onload=function(){
                document.getElementById("win").style="width:"+window.innerWidth+"px;height:"+window.innerHeight+"px;";
            }
        </script>
</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.