Protejare intr-un fel fisier PHP?

De ce dai quote doar la o parte?

De ce as da quote la tot?
De acolo poate sa vina problema, in $_POST nu intra doar ce intentionezi tu, intra si ce intentioneaza un hacker.

daca te-ai uita inainte de acel $_POST, este un type casting la int :roll_eyes:

Eu nu de acolo am dat quote, ci de mai sus. Dar se pare ca am dat reply la cine nu trebuie :slight_smile:
Lamurit? Din raspuns se putea vedea ca nu e pentru tine de fapt, ci pentru Ekors.

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    exit(); //sau echo "mesaj"
}

if(!isset($_POST["sad"])){
    echo "post not net"; // sau exit();
}

//pe astea ar trebui sa le tii in alta parte, nu in cod. fisier de config poate
$host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
     $pdo = new PDO($dsn, $user, $pass, $options);

     $sql = "UPDATE indexano SET Views=Views+1 WHERE ID=?" //paramtru. il primesti prin post
     $pdo->prepare($sql)->execute([$id]); //id-ul tau


} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

Nu am mai pus mana pe php de ceva timp :slight_smile:
Sper sa te ajute. Trebuie sa adaptezi la ce ai tu. Posibil sa fie erori de sintaxa.

Exista si solutii mai bune, dar pentru moment keep it simple.

De aici. Sau mysqli

Tine minte
Pe net lumea este rea

In general, never trust user input!

curl -sk -d "sad=123' OR ID >'1" http://my.server.com/update_value.php

Spor!


Observatiile sunt binevenite.

3 Likes

Nu prea vreau sa folosesc PDO pentru un proiect asa mic, dar multumesc tuturor.
O intrebare ar fi daca trebuie sa folosesc mysqli_close dupa fiecare mysqli_connect sau dupa fiecare: require_once 'config.php';. In caz ca nu folosesc e posibil sa ramana active conectarile si sa apara lagul/procesarea grea?

Poti sa folosesti ce vrei. In raspunsul meu este link si pt mysqli. Fisierul de config.php tine doar detaliile de conectare.

Daca acea conexiune sta deschisa prea mult, va fi inchisa automat.

Nu cred ca o sa ai probleme in cazul tau.

1 Like

De ce nu? N-am idee de PHP, dar pare cod destul de simplu ce a postat @Cosmin_Popescu. Și că sa nu trebuiască să te gândești la toate posibilitățile de sql injection, bad input etc. zic că merită.

In general, pentru proiectele mici și tipice sunt bune framework-uri.

3 Likes

Hm… deci sa inteleg ca PDO si framework-urile de acest gen au protectia SQL Injection incorporata?
Sau este intradevar incorporata dar in anumite cazuri sunt necesare si actiuni din partea mea, a developer-ului pentru a preveni asta.

Da, cu steluță.
De la StackOverflow citire --> https://stackoverflow.com/q/134099/5910563

Trucul pe care îl bagă @Cosmin_Popescu cu utf8mb4 de asta e.

In orice caz, e o chestie super tricky de făcut. Nu e ceva ce poți emula cu 1-2.

1 Like

Nu e vorba de PDO, ci de faptul că se folosesc aşa-numitele prepared statements. Tehnica asta de transmitere a argumentelor interogării elimină în totalitate posibilitatea de a injecta cod SQL. Si mysqli are prepared statements: https://www.php.net/manual/en/mysqli.prepare.php (de fapt asta este o capabilitate a serverului de baze de date, nu a clientului).

2 Likes