是否有可能在没有用户看到它的情况下将变量传递给php?

时间:2010-01-11 17:18:12

标签: php mysql html

我在页面上有一个链接,我想将变量发送到这样的php文件:

 href = "php_file.php?qry=$query"

$ query变量包含一个查询,我想在php文件中对mysql进行查询。

我的问题是,我不希望用户“看到”我传递的内容。我想使用$ _POST,但据我所知,这是不可能的。

还有其他简单方法吗?

由于

7 个答案:

答案 0 :(得分:6)

这是不可能的。即使您使用POST,也会非常不安全。

我的建议是将查询放在$ _SESSION变量中并在php_file.php中引用它。如果你有多个查询,你可以给它们一些ID并在会话中存储id =>查询对。 / p>

快速举例:

<?php
session_start();
$_SESSION["query1"] = "SOME QUERY";
$_SESSION["query2"] = "SOME OTHER QUERY";

?>
<a href='php_file.php?q=query1'>Execute first query</a>
<a href='php_file.php?q=query2'>Execute second query</a>

//in php_file.php
session_start();
$query = $_SESSION[$_GET["q"]];

显然这非常简单,您可能希望为其添加更多“安全性”(检查空参数等),但至少您的查询对用户不可见。

答案 1 :(得分:1)

是的,如上所述使用会话:http://www.php.net/manual/en/book.session.php

另外,不要将URI参数粘贴到SQL查询中:http://php.net/manual/en/security.database.sql-injection.php

答案 2 :(得分:0)

您可以使用会话或Cookie。但是,如果您试图让客户端向您发送客户端无法了解的信息,我认为您需要重新考虑这个问题。

我希望$ query不是SQL!

答案 3 :(得分:0)

除了加密(甚至那时)如果客户端有数据,就没有办法阻止客户端确定它的价值。

绝对不要在客户端放置查询!存储$ _SESSION中的任何内容。这样,实际数据就在服务器端。它永远不会发送给客户端,所以他们永远不会看到它。

答案 4 :(得分:0)

您显然希望通过隐藏或混淆SQL代码来阻止用户在浏览器中加载 php_file.php?qry = DELETE + FROM + users 等内容。我建议你重新考虑整个想法:你要求被黑客入侵。

您可以对服务器端代码中的操作列表进行硬编码,然后只传递一个标识符,例如:

php_file.php?qry=fetch-totals

然后

<?php

if( $_GET['qry']=='fetch-totals' ){
    // ....
}

?>

答案 5 :(得分:0)

如果您不希望他们实际查看链接中的查询参数,请尝试任何URL缩短服务(google will help)。当用户被重定向到您时,将此参数保存到会话,然后再次重定向但没有任何查询参数。这个解决方案只会在以下情况下工作,再一次,链接只是丑陋而且你不想这样离开它。正如mynameiscoffey所说,精明仍然能够弄明白。

还有cookies,隐藏表格,等等BTW。

答案 6 :(得分:0)

理论上,您可以使用加密并解密服务器上的值。然而,开销很大。无论如何,足够精密的用户都会得到它。要隐藏的值的明文将在某个点存在于变量中;他们需要的只是恰当时间的调试器和断点。

在此方案中,加密的复杂程度无关紧要。您不必一直使用RSA或其他一些方式;像钥匙的XOR就足够了。你在这里保护免受随意窥探,而不是对抗坚决的攻击。<​​/ p>