Am facut un sistem de “views”, merge super nicio problema. Dar intrebarea mea este daca fisierul .php poate sa fie vulnerabil?
Din HTML cu ajax fac apel catre “update_value.php”, in el este doar atat:
<?php
$id = $_POST["sad"];
$link = mysqli_connect("localhost", "root", "", "rpg");
mysqli_query($link, "UPDATE vtab SET Views=Views+1 WHERE ID='$id'");
mysqli_close($link);
?>
Daca il accesez in directorul in care este imi spune (DIN BROWSER): Notice : Undefined index: sad in C:\xampp\htdocs\index2\update_value.php on line 2.
Intrebarea mea este daca trebuie protejat intr-un fel sau e ok asa.
Daca inteleg eu bine, tu incerci sa deschizi fisierul ala de pe disk ? Daca da, eroarea respectiva este pentru ca atunci cand il deschizi asa, variabila $_POST nu este populata, asa cum este atunci cand faci un ajax request.
Pe langa asta, scriptul tau este vulnerabil la SQL Injection. Trebuie sa folosesti prepared statements ca sa scapi de aceasta vulnerabilitate
Stiu din ce cauza este eroarea, am spus ca totul merge perfect. L-am accesat din browser doar “ca idee” sa o expun aici. Insa intrebarea mea era doar daca trebuie protejat intr-un fel, adica spre exemplu sa nu-l mai poti accesa din browser ci doar atunci cand se face “ajax” din fisierul HTML.
Nu mai da, asa am facut si eu inainte. Dar e ok sa fie asa? Adica se pot accesa intr-un fel datele din .php sau n-are nimic daca ramane asa atata timp cat e protejat sql_injection?
Nici nu cred ca se pune problema de SQL Injection aici. ID vine de la un tabel din html in care este un foreach sa-mi afiseze niste articole. E ceva de genul: <a class=“bla bla” sid="’.$row[‘ID’].’", ID = ID-ul din baza de date a articolului.
JS:
Codul tău este vulenrabil la SQL injection, fară nici o îndoială.
În anului Domnului 2019 (spre 2020) îți recomand cu încredere să folosești PDO împreună cu Prepared Statements. O să ai câteva linii de cod în plus, dar te va scăpa de alte bătăi de cap.
Dacă totuși nu vrei să folosești PDO, îti recomand să folosești filter_input pentru a procesa orice date venite din browser (request).
Ca să întelegi mai bine să de ce codul tău este vulnerabil recomand OWASP, chiar dacă informațiile de acolo sunt mai greu de digerat pentru un începător, merită efortul.
E si o problema conceptuala la ce faci acolo, tu nu numeri de cate ori incarci o pagina ci de cate ori se face acel ajax request. De ce anume ai ales ajax? Poate ar trebui sa te protejezi si impotriva unui script care trimite automat acel request de pe alt server, de exemplu, ca sa nu poata umfla oricine views pt un anumit id fara ca macar sa incarce pagina.
Daca fisierul nu e accesibil din browser, atunci nu va fi accesibil nici prin Ajax. Ce mai poti face (pentru ca tu vrei ca scriptul ala sa fie apelat doar printr-o metoda post), este sa verifici la inceput daca metoda care apeleaza scriptul este POST. Daca nu este, poti sa intorci eroare, sau orice altceva. Asta o poti face in felul urmator:
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
// error
}
... <codul tau aici>