Запросите переписывание проверки утверждения кодировки, чтобы предотвратить атаки внедрения SQL - PullRequest
0 голосов
/ 23 октября 2019

Я читал эту статью: https://www.iitp.ac.in/~halder/Papers/Journal/ACSS_2016_2.pdf и на странице № 7 описываются таблица базы данных (a) loginfo и sailinfo.

Некоторые запросы пишутся

1. start;
2. Stmt = DriverManager.getConnection(” jdbc:mysql://172.16.1.16:1115/
demo”, ”scott”, ”tiger”).createStatement();
3. Resultset rs1 = Stmt.executeQuery(“SELECT eid FROM loginfo WHERE login = ' "+ slogin +" ' AND
pass = ’ ”+ spass +” ’ ” );
4. Resultset rs2 = Stmt.executeQuery(“SELECT ename FROM salinfo WHERE B sal> GP + ' "+vsal+" ' ”);
5. Resultset rs3 = Stmt.executeQuery(“SELECT ename FROM salinfo WHERE GP > ' "+ com +" ' *
’ ”+ rate +” ’ ”);
6. stop;
(b)

Я хочу построить и преобразовать запрос из таблицы (a) в запросы, как показано в таблице (b).

То, как я написал эти запросы для одного примера, выглядит следующим образом:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "thesis";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

echo "\n";

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

echo "<br>";
echo "<br>";

// sql input table queries
echo "Output";

//$sql="SELECT loginfo.eid FROM loginfo WHERE loginfo.login = (SELECT input.u_input_1 FROM input WHERE input.QID = 6 AND input.IID_1 = 1) AND loginfo.pass = (        //SELECT input.u_input_2 FROM input WHERE input.QID = 6 AND input.IID_2 = 2);";

$sql = "SELECT eid FROM loginfo WHERE login= (SELECT u_input_1 FROM input WHERE QID = 6 AND IID_1 = 1) AND pass = (SELECT u_input_2 FROM input WHERE QID = 6 AND IID_2 = 2) ;";
echo "<br>";
echo "<br>";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "\n \n eid: " . $row["eid"]."<br>";
    }
} else {
    echo "0 results";
}
echo "<br>";
echo "<br>";

// sql input table queries
echo "Output";
$sql1 = "SELECT ename FROM salinfo WHERE GP > (SELECT u_input_1 FROM
INPUT WHERE QID = 10 AND IID_1 = 1);";
echo "<br>";
echo "<br>";

$result = $conn->query($sql1);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "\n \n ename: " . $row["ename"]."<br>";
    }
} else {
    echo "0 results";
}
echo "<br>";
echo "<br>";

// sql input table queries
echo "Output";
$sql2 = "SELECT ename FROM salinfo WHERE B_sal > GP + (SELECT u_input_1 FROM INPUT WHERE QID = 10 AND IID_1 = 1);";
echo "<br>";
echo "<br>";

$result = $conn->query($sql2);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "\n \n ename: " . $row["ename"]."<br>";
    }
} else {
    echo "0 results";
}
echo "<br>";
echo "<br>";

$conn->close();
?>

Эта техника, которую я показал, называется Query Re. Я хочу знать, хочу ли я реализовать это для общих запросов, это только для одного примера, что может быть лучшим способом сделать то же самое. Пожалуйста, помогите мне с этим подходом.

...