Можно ли передать переменную в php, не увидев ее? - PullRequest
1 голос
/ 11 января 2010

У меня есть ссылка на страницу, и я хотел бы отправить переменную в php-файл следующим образом:

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

переменная $ query содержит запрос, который я хотел бы сделать для mysql, внутри php-файла.

Моя проблема в том, что я не хочу, чтобы пользователи «видели» то, что я передаю. Я хотел бы использовать $ _POST, но насколько я знаю, это невозможно.

Есть ли другой простой способ?

Спасибо

Ответы [ 7 ]

6 голосов
/ 11 января 2010

Это невозможно. Даже если бы вы использовали POST, это было бы очень небезопасно.

Я бы предложил поместить запрос в переменную $ _SESSION и сослаться на него обратно в php_file.php. Если у вас есть несколько запросов, вы можете дать им какой-нибудь идентификатор и сохранить пару запросов id => в сеансе.

Быстрый пример:

<?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 голос
/ 11 января 2010

Да, как указано, используйте сеанс: http://www.php.net/manual/en/book.session.php

Кроме того, не вставляйте параметры URI в запрос SQL: http://php.net/manual/en/security.database.sql-injection.php

0 голосов
/ 11 января 2010

Теоретически вы можете использовать шифрование и расшифровать значение на сервере. Однако накладные расходы огромны. И достаточно опытный пользователь все равно доберется до него. Открытый текст скрытого значения будет существовать в переменной в некоторой точке; отладчик и точка останова в нужное время - это все, что им нужно.

В этой схеме не имеет значения, насколько сложным является шифрование. Вам не нужно идти до конца с RSA или чем-то подобным; что-то вроде XOR с ключом будет достаточно. Вы защищаете от случайного слежения здесь, а не от решительной атаки.

0 голосов
/ 11 января 2010

Ну, если вы не хотите, чтобы они действительно видели параметры запроса в ссылке, попробуйте любой сервис сокращения URL ( Google поможет ). И когда пользователь перенаправлен на вас, сохраните этот параметр в сеансе, а затем выполните перенаправление еще раз, но без каких-либо параметров запроса. Это решение будет работать только в том случае, если, опять же, ссылка просто безобразна, и вы не хотите так ее оставлять. Как сказал mynameiscoffey, здравый смысл все равно сможет это понять.

А также куки, скрытые формы, JavaScript и т. Д. Кстати.

0 голосов
/ 11 января 2010

Очевидно, что вы хотите запретить пользователям загружать такие вещи, как php_file.php? Qry = DELETE + FROM + users в своих браузерах, скрывая или запутывая код SQL. Я предлагаю вам пересмотреть всю идею: вы просите, чтобы вас взломали.

Вы можете жестко закодировать список операций в коде на стороне сервера и просто передать идентификатор, например ::

php_file.php?qry=fetch-totals

, а затем

<?php

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

?>
0 голосов
/ 11 января 2010

Помимо шифрования (и даже тогда), если на стороне клиента есть данные, невозможно помешать клиенту определить их значение.

Определенно не ставьте запросы на стороне клиента! Сохраните все, что есть в $ _SESSION. Таким образом, фактические данные находятся на стороне сервера. Он никогда не отправляется клиенту, поэтому они никогда его не увидят.

0 голосов
/ 11 января 2010

Вы можете использовать сеансы или куки. Но если вы пытаетесь заставить клиента отправить вам информацию, о которой клиент не может знать, я думаю, вам нужно переосмыслить проблему.

Я надеюсь, что $ query не SQL!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...