使用POST方法隐藏URL参数

时间:2011-10-26 17:15:41

标签: php mysql methods url-parameters

据我所知,我可以使用POST参数的POST方法根据特定变量显示数据,我知道如何使用GET方法 - 但我被告知POST方法可以用来隐藏URL的一部分就是这样。

/data.php?parameter=1234

两种方法在URL参数方面的实际差异是什么?

以下是根据特定链接的ID

从数据库中提取数据的一些代码
    <?php
//This includes the variables, adjusted within the 'config.php file' and the functions from the 'functions.php' - the config variables are adjusted prior to anything else.
require('configs/config.php');
require('configs/functions.php');

    //This is the actual interaction with the database, according to the id.
    $query = mysql_query("SELECT * FROM table WHERE id=" .$_GET['id'] . ";") or die("An error has occurred");

            //This re-directs to an error page the user preventing them from viewing the page if there are no rows with data equal to the query.
    if( mysql_num_rows($query) < 1 )
{
  header('Location: 404.php');
  exit;
}

    //Here each cell in the database is fetched and assigned a variable.
    while($row = mysql_fetch_array($query))
    {
        $id = $row['id'];
        $title = $row['title'];
        $month = $row['month'];
        $day = $row['day'];
        $photo = $row['photo'];
        $text = $row['text'];    
    }
?>

在另一个页面上,我根据ID生成指向data.php文件的链接,如下所示:

<a href="post.php?id=<?php echo $content['id']; ?>"><?php echo $content['title']; ?></a>

忘记通过上面的代码可能会发生SQL注入,我将如何使用POST方法来隐藏URL参数,或者至少不显示它们:

http://example.com/data.php?id=1

6 个答案:

答案 0 :(得分:2)

要使用POST,您需要使用<form>标记,并且根据您提取这些网址的方式,使用javascript可能更容易提供帮助。这是一个基本的例子:

<form method="post" action="data.php">
    <input type="hidden" name="parameter" value="1234" />
    <input type="submit" value="Go" />
</form>

Go按钮将POST表单数据,现在在data.php中,您将能够从$_POST['parameter']检索值。请注意,使用POST时,您可能希望将(HTTP 302)重定向回页面,以便当用户点击后退按钮时,浏览器不会提示重新提交表单。

使用javascript,您可以在发布表单之前将parameter输入设置为其他值。

答案 1 :(得分:2)

为表单使用“POST”方法。我有同样的问题,只需在表单中添加POST,从URL中删除参数

<form id="abc" name="abc" action="someaction.php" method="post">
    <input type="text" id="username" name="username"/>
    <input type="password" id="password" name="password"/>
    <input type="submit" id="submit" name="submit" value="submit"/>
</form>

答案 2 :(得分:0)

要POST值,浏览器必须使用带有method =“post”的表单,或者模拟表单的javascript。各种开发人员工具(fireug等)可以将GET表单转换为POST表单,但通常,表单是必需的。

理论上,GET请求不应有任何副作用,并且“应该”从请求到请求是一致的。也就是说,服务器应该返回相同的内容。在当今几乎所有动态的世界中,这可能没有什么实际的设计意义。

答案 3 :(得分:0)

无论您使用GET还是POST,参数都会显示在$_REQUEST中。关键的区别在于使用POST允许变量不出现在URL历史记录中。这会降低您不希望在URL历史记录中显示的密码等数据的可见性。要使用POST而不是GET,只需在文档中生成<form method="POST" ...>

更好的方法是在Cookie中存储敏感值(例如用户ID),以便它们根本不会出现在$_REQUEST中。由于cookie的内容是在额外的HTTP请求标头中提供的,而不是在内容中提供的,因此它们通常不会作为历史记录的一部分存储。

答案 4 :(得分:0)

为了使用POST而不是GET,您需要在html中使用HTML表单标记,如下所示:

<form method="POST" action="/data.php">
  <input type="hidden" name="parameter" value="1234" />
  <button type="submit">Submit</button>
</form>

提交后,您的网址将为/data.php,参数= 1234将位于您的(隐藏)帖子缓冲区中。

有意义吗?

答案 5 :(得分:0)

要进行POST,您必须使用表单或一些javascript / ajax技巧。 <a>只会导致GET请求。

请注意,POST请求仍然可以在URL中包含查询参数。拥有它们并不“正常”,但它们是允许的。主要区别在于GET请求(忽略cookie),URL是 ONLY 将参数/数据发送到服务器的方式。使用POST,您可以同时使用URL和POST请求的正文,这是通常放置POST表单数据的位置。