Как санировать запрос на прием имени таблицы в качестве параметра PDO php - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть следующий код, который работает, однако, теперь мне просто интересно, будет ли это безопасно, а не sql для инъекций и т. Д.

Я не могу использовать подход с именами таблиц в белых списках, как для моего веб-приложения, в будущем будет сгенерировано больше таблиц в случайном порядке, и они будут передаваться через параметр URL-адреса table, поэтому я никогда не буду знать все таблицы .

Я использую первый запрос, чтобы определить, действительно ли существует таблица, которая передается через параметр URL, в противном случае я буду выходить из сценария, который я еще не добавлю.

$db = "database1";
$table = $_GET['table'];
$stmt = $auth_table->runQuery("Select table_name, table_schema from information_schema.tables where table_schema = :db and table_name = :tablename");
$stmt->execute(array(":db"=>$db,":tablename"=>$table));
$tableRow=$stmt->fetch(PDO::FETCH_ASSOC);
$table_schema = $tableRow['table_schema'].".".$tableRow['table_name'];

$stmt = $auth_table->runQuery("Select * from ".$table_schema."");
$stmt->execute();
$testing=$stmt->fetch(PDO::FETCH_ASSOC);
print_r($testing['level']);
exit();

1 Ответ

0 голосов
/ 17 ноября 2018

Белый список существующих таблиц

$db = "database1";
$table = $_GET['table'];

$dbh = new PDO('mysql:host=localhost;dbname=database1', $user, $pass);
$tableSql = "SHOW TABLES FROM " . $db;       
$tableRes = $dbh->query($tableSQL); 
$tableArr  = $tableRes->fetch(PDO::FETCH_ASSOC);
$whitelist = $tableArr[0]['Tables_in_database1']; 
if(!in_array($table, $whitelist)){
    exit(); //Or RickRoll Them
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...