2016-09-15 4 views
0

У меня есть PHP-файл, включенный в первую строку моего основного PHP-скрипта следующим образом:PHP: Запустите оператор mysql_query, содержащий строку, но строка содержит строку, заданную во включенном файле, который вызывается до того, как строка установлена ​​

// Include obfusctated MySQL queries 
include "../../secure_storage/mysql_queries.php"; 

// $user_id stores the cookie as a variable. The cookie contains the user ID 
$user_id = $_COOKIE['storerun_user_id']; 

// Query the database to get the user's account information 
$account_query = mysql_query($account_query_sql); 

Прилагаемый PHP файл содержит следующую строку кода:

$account_query_sql = "SELECT `first_name`, `last_name`, `email`, `password`, `referral_link`, `street_address`, `floor_apartment_number`, `notes`, `ecocash_number` FROM `users` WHERE `user_id` = '$user_id'"; 

Причина в том, что я запутывания запросов SQL и размещение их в директории от корня на сервере.

Проблема заключается в том, что включенный файл содержит SQL-запрос, содержащий $ user_id, но строка устанавливается только после того, как файл включен. Любые идеи по использованию моей установки и возможности запуска mysql_query? Я все время пытался понять это в своей голове. Конечно, есть способ сделать это.

+2

** Почему вы запутываете SQL-запросы? Остановите это. ** – Xatenev

+0

@ Xatenev, чтобы хакеры не могли получить доступ к серверу через FTP и, по какой-либо причине, могли видеть инструкции SQL. –

+2

1. Не используйте устаревшие функции mysql_ *. Они устарели с PHP 5.5 и полностью удалены в PHP 7. Вместо этого используйте MySQLi или PDO. 2. Вы широко открыты для [SQL Injections] (http://php.net/manual/en/security.database.sql-injection.php) и должны действительно использовать [Подготовленные утверждения] (http://php.net /manual/en/mysqli.quickstart.prepared-statements.php) вместо объединения ваших запросов, которые могут быть использованы, если вы используете вышеупомянутый MySQLi или PDO. –

ответ

-2

Дак, я бы не стал беспокоиться о том, чтобы скрывать ваши запросы sql. Тем не менее, если вы хотите сделать это, можно добавить строку заменить заявление только до вашего заявления базы данных запроса и редактировать включаемый файл использовать «search_item», например:

str_replace('search_item', $user_id, $account_query_sql); 

и включен файл будет определять $ account_query_sql, как показано ниже.

$account_query_sql = "SELECT `first_name`, `last_name`, `email`, `password`, `referral_link`, `street_address`, `floor_apartment_number`, `notes`, `ecocash_number` FROM `users` WHERE `user_id` = 'search_item'"; 
+0

Это сработало! Спасибо Крейгу. У меня нет никаких шансов на какие-либо хаки, поэтому мне посоветовали скрыть SQL-запросы, если хакер каким-то образом обращается к корневой папке сервера через FTP. –

+2

Также известен как глупый фокус. Если это проблема, вы, вероятно, наверстываете тосты. – Drew

+3

_ «Я вообще не рисковал любыми хаками» _ - Действительно? Это серьезный взлом, способствующий действительно плохой практике, и не говоря уже о том, что это небезопасно! –

1

Просто измените порядок вашего кода:

$user_id = $_COOKIE['storerun_user_id']; 

include "../../secure_storage/mysql_queries.php"; 

PHP не может путешествовать во времени, поэтому ваш код должен выполнить действия, описанные в соответствующем порядке - создать переменные ПЕРЕД вы пытаетесь использовать их , не после.

Обратите внимание, что вы уязвимы для sql injection attacks.

+0

Крейг ответил, что мне нужно. Спасибо за отзыв о SQL-инъекциях, я буду работать над этим. Проделает полный тест на проникновение и уязвимости. –

+0

Я предлагаю вам выбрать дюжину запросов, и пусть другие просмотрят их. – Drew

+2

Я позволю другим ознакомиться с моим кодом и запросами. –