Как улучшить код PHP против внедрения SQL и других угроз - PullRequest
0 голосов
/ 27 сентября 2011

Как я могу изменить этот код для улучшения защиты от внедрения SQL и других угроз?Это база данных MS SQL.

<?php include_once("db.php"); ?>

<?php
$id = $_REQUEST['id'];
settype($id, 'string');

$tsql = "SELECT Table1.Fund FROM Table1 WHERE Table1.Fund='%s'";
$tsqlnew=sprintf($tsql, $id);

$stmt = sqlsrv_query( $conn, $tsqlnew);
if( $stmt === false)
{
echo "Error in query preparation/execution.\n";
die( print_r( sqlsrv_errors(), true));
}

$chd = '';

while( $data = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))  {
$chd .= '[\''.$data['Fund'] .'\'],';
}
$chd = substr($chd,0,-1);

?>

Мне также интересно, можно ли улучшить соединение с БД.Спасибо за вашу помощь!

<?php

$myServer = "server";
$myUser = "userPlaceHolder";
$myPass = "passwordPlaceHolder";
$myDB = "SQL";

$conn = sqlsrv_connect($myServer, array('UID'=>$myUser, 'PWD'=>$myPass, 'Database'=>$myDB));

if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
?>

1 Ответ

6 голосов
/ 28 сентября 2011

Ваш код делает точно НИЧЕГО , чтобы предотвратить инъекционные атаки.Простое принуждение переменной иметь строковый тип данных является такой же надежной защитой, как кусок туалетной бумаги от цунами.

Чтобы предотвратить атаки с помощью инъекций, вы должны экранировать все данные, которые вы вставляете в строку запроса,будь то пользовательский или что-то, что вы сами создали / вставили.

Наилучшим вариантом является использование подготовленных операторов , что освобождает вас от ответственности за экранирование данных.

Даже если вставляемые данные не являются «вредоносными», любыеМетасимволы SQL (в частности, кавычки) могут разрушить запрос и вызвать синтаксические ошибки.

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