Varnost PHP/SQL

Vse o programiranju na in za PC

Moderatorji: Kroko, tilz0R

Varnost PHP/SQL

OdgovorNapisal/-a s54mtb » 07 Mar 2017, 01:08

A je to dovolj močan filter proti neželjenim SQL vdorom?

Koda: Izberi vse
<?php

// Configuration + moja knjižnica
require_once('./config.php');
require_once('./functions.php');

// Get URL data
$node_id_strIN = filter_input( INPUT_GET, 'nodeid', FILTER_SANITIZE_URL );
$addressIN= filter_input( INPUT_GET, 'address', FILTER_SANITIZE_URL ); // Get the URL thingy
$deviceIN= filter_input( INPUT_GET, 'device', FILTER_SANITIZE_URL ); // Get the URL thingy
$parameterIN= filter_input( INPUT_GET, 'parameter', FILTER_SANITIZE_URL ); // Get the URL thingy


/* Najprej nesnago ven.... */
/* node_id je vedno pozitivno stevilo */
$node_id_str = preg_replace("/[^A-Za-z0-9 ]/", '', $node_id_strIN);
$node_id = intval($node_id_str);

$address = preg_replace("/[^A-Za-z0-9 ]/", '', $addressIN );
$device = preg_replace("/[^A-Za-z0-9 ]/", '', $deviceIN );
$parameter = preg_replace("/[^A-Za-z0-9 ]/", '', $parameterIN );

// Create connection
$conn = new mysqli($mysql_host,$mysql_username,$mysql_password,$mysql_dbname);

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

$sql = 'SELECT * FROM nodes WHERE ID="'.$node_id.'"';
$result = $conn->query($sql);

if ($result->num_rows > 0)
{
    // output data
    $row = mysqli_fetch_assoc($result);
    $node_ident = $row["ID"];  // numeric unique identifier
    //$node_id = $row["NodeID"];
    $node_desc = $row["Description"];
    $adr_val = intval($address);
    $sql = sprintf('SELECT Timestamp, Value FROM dogodki WHERE Node="%d" AND Address="%d" AND Device="%s" AND Parameter="%s"',$node_ident, $adr_val, $device, $parameter);
                   //"VALUES (NULL ,CURRENT_TIMESTAMP , '%d', '%s', '%s', '%s', '%s');",$node_ident,$address,$device,$parameter,$value);
    $result = $conn->query($sql);

..........

ostalo ni vezano na sql......
Uporabniški avatar
s54mtb
 
Prispevkov: 11188
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 1556 krat
Prejel zahvalo: 4056 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Varnost PHP/SQL

OdgovorNapisal/-a blasny » 07 Mar 2017, 19:55

Tvoja glavna napaka je, da ne uporabljas parametiziranih query-jev.

Branje npr. tukaj: http://resources.infosecinstitute.com/parameterized-sql-query-dynamic-sql-query/
blasny
 
Prispevkov: 437
Pridružen: 18 Jan 2015, 16:48
Zahvalil se je: 314 krat
Prejel zahvalo: 122 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 15

Re: Varnost PHP/SQL

OdgovorNapisal/-a zanka » 07 Mar 2017, 21:34

Ampak zaenkrat to dobro rešuje, ker omejuje narekovaje s preg_replace.
Uporabniški avatar
zanka
 
Prispevkov: 2569
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 113 krat
Prejel zahvalo: 254 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 50

Re: Varnost PHP/SQL

OdgovorNapisal/-a s54mtb » 07 Mar 2017, 21:57

blasny je napisal/-a:Tvoja glavna napaka je, da ne uporabljas parametiziranih query-jev.

Branje npr. tukaj: http://resources.infosecinstitute.com/parameterized-sql-query-dynamic-sql-query/


V to jabolko še nisem vgriznil, ker do sedaj sem v glavnem uporabljal sql znotraj "sterilnih" okolij. Dobesedno. V čisti proizvodnji, kjer računalniki nimajo mrežnih kartic. Backup se pa dela z menjavo diskov, baze se pa potem kopira na nivoju diska in obdeluje off-line.
Uporabniški avatar
s54mtb
 
Prispevkov: 11188
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 1556 krat
Prejel zahvalo: 4056 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Varnost PHP/SQL

OdgovorNapisal/-a tilz0R » 07 Mar 2017, 22:36

Že real_escape_string funkcija od MySQLi razreda bi verjetno rešila situacijo pred nezaželjenim injectom. Razen če to ni to kar iščeš.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1815
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 229 krat
Prejel zahvalo: 509 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255


Vrni se na Programski jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 2 gostov

cron