Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
Apelare functie php din Ajax
Last Updated: Nov 23 2016 00:03, Started by
guttuso
, Nov 20 2016 17:26
·
0
#1
Posted 20 November 2016 - 17:26
Salutare,
Am urmatorul cod Ajax: function fetch_select(){ val_name = $('#name').val(); $.ajax({ type: 'POST', url: 'include/get_db.inc.php', data: { name: val_name, }, success: function (response) { document.getElementById('higtchart_medie_gen').innerHTML=response; columnChart( JSON.parse(response)); } }); } function columnChart(data_v){ if(data_v.length >0){ $(function () { $('#higtchart_medie_gen').highcharts({ chart: { type: 'column' }, ......get_db.inc.php si contine urmatoarea functie, tin sa precizez ca in fisier mai sunt functii: <?php function test_name () { $ret = []; if(isset($_POST['name'])){ $name = $_POST['name']; $sql = "SELECT ...... WHERE ID = $name "; $result = $conn->query($sql); if($result->num_rows > 0){ while($row = $result->fetch_assoc()) { $ret [] = [$row['NAME'] . ' ' . $row['LASTN'], floatval($row['AVGG'])]; } } } if(count($ret) >1) echo json_encode($ret); else echo 'Not working'; } ?>Cum pot apela in codul Ajax functia test_name din php? Multumesc! |
#2
Posted 20 November 2016 - 18:01
guttuso, on 20 noiembrie 2016 - 17:26, said:
get_db.inc.php si contine urmatoarea functie, tin sa precizez ca in fisier mai sunt functii: Trebuie sa ai un fisier.php care apeleaza functia in cauza - cu parametrii corecti, de genul: <?php include 'db.inc.php'; xyz(); Si din javascript sa apelezi acel URL (via ajax), de genul url: 'include/fisier.php' Abia atunci vei avea un apel. |
#3
Posted 20 November 2016 - 18:02
Modifici fisierul ala PHP in asa fel incat sa detecteze o anume valoare $_POST care vrei tu, iar in javascriptul ala trimiti acelasi parametru. Nu poti comunica diect intre ajax si php, primul se executa pe calculatorul clientul, iar al doilea pe server, comunica doar via internet.
|
#4
Posted 20 November 2016 - 20:01
Am rezolvat problema cu ajutorul unui coleg de pe al forum, las mai jos rezolvarea lui poate mai sunt colegi care se vor izbi de problema:
in codul ajax am adaugat la url: include/get_db.inc.php?action=test_name si in php codul: if (isset($_GET['action']) && is_string($_GET['action']) && function_exists($_GET['action'])) { call_user_func($_GET['action'], $conn); }, $conn este necesar doar daca functia are si parmetrii Edited by guttuso, 20 November 2016 - 20:01. |
#5
Posted 20 November 2016 - 20:05
Comoda solutia, dar miroase a gaura de securitate. Daca cere userul ceva gen "restart server"?
|
#6
Posted 20 November 2016 - 20:50
eh, de treaba asta nu mai stiam si nici cum as putea face restart server si sa vad ce se poate intampla. Cum as putea rezolva problema intr-un mod care sa nu imi creeze probleme.
Multumesc! Edited by guttuso, 20 November 2016 - 20:51. |
#7
Posted 20 November 2016 - 20:52
guttuso, on 20 noiembrie 2016 - 20:01, said:
Am rezolvat problema cu ajutorul unui coleg de pe al forum, las mai jos rezolvarea lui poate mai sunt colegi care se vor izbi de problema: in codul ajax am adaugat la url: include/get_db.inc.php?action=test_name si in php codul: if (isset($_GET['action']) && is_string($_GET['action']) && function_exists($_GET['action'])) { call_user_func($_GET['action'], $conn); }, $conn este necesar doar daca functia are si parmetrii nu folositi acest tip de cod, are o gaura grava de securitate. Si in general valabil, nu copiati coduri de pe forumuri, ca uneori calitatea e de cel mai jos nivel. guttuso, on 20 noiembrie 2016 - 20:50, said:
eh, de treaba asta nu mai stiam, atunci cum as putea rezolva problema intr-un mod care sa nu imi creeze probleme. Multumesc! |
#8
Posted 20 November 2016 - 20:58
Ce rau face acel cod pe langa fatul ca isi face treaba asta nu mai stiu, nu stiu unde am lasat cai de acces in site-ul meu si cum se pot verifica aceste gauri nici asta nu mai stiu. Important este ca am mai invatat ceva astazi.
@OriginalCopy, multumesc! Edited by guttuso, 20 November 2016 - 20:59. |
#9
Posted 20 November 2016 - 21:06
#10
Posted 20 November 2016 - 21:09
Un principiu de baza: nu avea niciodata incredere in ce-ti ofera userul (ce preiei din $_GET/$_POST sau asemenea). Presupune mereu ca "incearca sa te faca" si scrie cod care sa aibe grija la asta.
Edited by dani.user, 20 November 2016 - 21:14. |
|
#11
Posted 20 November 2016 - 21:11
Si nici in $_COOKIE si nici in 99.99% din datele din $_SERVER sa nu ai incredere, si ele pot fi injectate de utilizator.
|
#12
Posted 21 November 2016 - 07:45
guttuso, on 20 noiembrie 2016 - 20:01, said:
Am rezolvat problema cu ajutorul unui coleg de pe al forum, las mai jos rezolvarea lui poate mai sunt colegi care se vor izbi de problema: in codul ajax am adaugat la url: include/get_db.inc.php?action=test_name si in php codul: if (isset($_GET['action']) && is_string($_GET['action']) && function_exists($_GET['action'])) { call_user_func($_GET['action'], $conn); }, $conn este necesar doar daca functia are si parmetrii Codul asta are 2 probleme: 1. Tot ce este in folderul "include" ar trebui interzis sa se execute in mod direct prin cereri HTTP si returnat 404 Not Found, ori tu faci exact opusul 2. Cum au zis colegii lasand userul sa execute functii arbitrare pe server e foarte periculos. Poate functia restart_server() din PHP nu exista acum, dar daca o folosesti mai tarziu, ea va fi executata si te-ai ars. Tot ce trebuie atacatorul sa faca e sa "ghiceasca" numele unei functii din codul tau si gata. Daca nu vrei sa tii seama de punctul 1 atunci macar schimba codul PHP astfel: if (isset($_GET['action']) && $_GET['action'] == "func_name" ) { func_name(); } Macar asa atacatorul nu va putea executa functii arbitrare pe server. |
#13
Posted 22 November 2016 - 23:15
Sunt foarte la inceput cu ceea ce inseamna php, nu aveam nicio idee ca cineva imi poate termina site-ul aflandu-mi numele unei functii. O sa mai studiez ce inseamna security php
daca vin cu ceva de genul: $actions = ['nume_functie_1', 'nume_functie_2']; if (isset($_GET['action']) && is_string($_GET['action']) && in_array($_GET['action'], $actions))) { $func = htmlspecialchars($_GET['action']); call_user_func($_GET['action'], $conn); } sau switch($_GET['action']) { case "nume_functie_1": call_user_func($_GET['action'], $conn); break; case "nume_functie_2": call_user_func($_GET['action'], $conn); break; // etc. default: // banez utilizatorul. break; }cum stau in cazul acesta? Edited by guttuso, 22 November 2016 - 23:17. |
#14
Posted 23 November 2016 - 00:03
In prima varianta, ce rol are $func = htmlspecialchars($_GET['action']);?
In a doua, daca tot ai numele concret in case, poti s-o chemi direct, fara call user func. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users