XSS & amp; SQLi Prevention + Получение переменной из URL

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

Я хочу иметь что-то вроде логина, если ключ правильный и совпадает с IP в базе данных, тогда делай другие вещи

if (isset($_GET['key'])) {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}

$apikey = $_GET['key'];
//$apikey = mysql_real_escape_string($api);
echo $apikey."<br />".$ip;

$mysql_host = "**.***.**.***";
$mysql_database = "*****";
$mysql_user = "********";
$mysql_password = "******************";

mysql_connect($mysql_host,$mysql_user,$mysql_password);
@mysql_select_db($mysql_database) or die("Unable to select database");
$query="SELECT * FROM `api` WHERE `apikey` = '".$apikey."' AND `ip`='".$ip"'";
$result=mysql_query($query);

if (!$result) {
die(mysql_error());
}

// assign mySQL values from table to php variables
$teest = mysql_result($result,1,'apikey');
echo $teest;
//close the mySQL connection
mysql_close();
} else {
echo "Usage: api.php?key={YourUniqueKey}";
}

0

Решение

а) расширение, предоставляющее функцию mysql_ *, помечено как deprecatd. Лучше использовать MySQL или PDO.

б) Вы помещаете два параметра (в виде строковых литералов) в ваш SQL-запрос. Оба (строковых) параметра должны быть закодированы / экранированы должным образом, чтобы они не могли мешать действительному запросу (структуре).
Это делается mysql_real_escape_string. Но для правильной работы этой функции требуется некоторая информация из ресурса соединения (а именно кодировки соединения). Поэтому вы можете сделать вызов mysql_real_escape_string () только после того, как вы установили соединение mysql viw mysql_connect.

<?php
if ( !isset($_GET['key']) ) {
echo "Usage: api.php?key={YourUniqueKey}";
}
else {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}

$apikey = $_GET['key'];
echo htmlspecialchars($apikey)."<br />".htmlspecialchars($ip);

$mysql_host = "**.***.**.***";
$mysql_database = "*****";
$mysql_user = "********";
$mysql_password = "******************";
$link = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die('database connection failed');
mysql_select_db($mysql_database, $link) or die("Unable to select database");

$query = sprintf(
"SELECT
COUNT(*)
FROM
api
WHERE
apikey='%s'
AND ip='%s'
",
mysql_real_escape_string($apikey, $link),
mysql_real_escape_string($ip, $link)
);
$result=mysql_query($query, $link);
if (!$result) {
die(mysql_error());
}
$row = mysql_fetch_row($result);
if ( '1'==$row[0] ) {
echo 'yay';
}
else {
echo 'nay';
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]