PHP - 隐藏url(GET)参数

时间:2014-06-27 20:05:27

标签: php post parameters get

我的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>

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

是否可以隐藏/屏蔽/伪装网址,以便用户在将参数传递到指定网站时看不到参数?

如果不是,你们会怎么做呢?我主要担心用户和密码params并需要隐藏它们。 (用户=亚当&安培;密码= pass1234)

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

修改 对于那些一直建议使用POST方法的人,这不是一个选项,因为我没有使用表单而且接收网站不受我的控制。我从一个站点登录到另一个站点(第三方)网站

7 个答案:

答案 0 :(得分: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>

编辑:如果必须是链接并且可能需要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>

答案 1 :(得分:2)

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

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

答案 2 :(得分: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)是您要创建的函数。

答案 3 :(得分:0)

登录应该通过POST完成,而不是GET。此外,敏感信息应通过HTTPS发送。

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

如果您对安全性有进一步的具体问题,建议您在Security.SE处尝试。

答案 4 :(得分:0)

您无法使用GET方法执行此操作。如果您向我们提供更多信息,将会很有帮助。您是否试图从您的网站获取用户登录其他网站?在这种情况下,他们可能会有一个您可以检查的API。

答案 5 :(得分: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保存令牌并使用此功能,您可以轻松地为同一用户生成更多令牌以及轻松取消任何令牌。

答案 6 :(得分:0)

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

@Override
public Object convertToDatabaseColumn(LocalDateTime locDateTime) {
    return locDateTime == null ? null : Timestamp.valueOf(locDateTime);
}