Autor | Zpráva | ||
---|---|---|---|
Ikki Profil |
#1 · Zasláno: 20. 10. 2017, 14:25:16
Zdravím, ačkoli je to naprosto primitivní hloupost, tak si nejsem schopen poradit, bohužel.
Jedná se o odkazem zaslané podmínky (nick=xx&action=star&id=1), přičemž mám podmínku if(isset($_GET['action']) == 'star'){ $mysqli->query("UPDATE private_message SET star='1' WHERE id='".$_GET['id']."' AND mess_id='1'");} což by mělo v tabulce "private_message" nastavit pro ID=1 hodnotu STAR=1, bohužel tak neučiní, přehlédl jsem něco?
|
||
Keeehi Profil |
Je špatně ta podmínka
if(isset($_GET['action']) && $_GET['action'] == 'star') A ještě ti to trpí na SQL injection zranitelnost. nick=xx&action=star&id=1'+OR+1=1+--+a |
||
WordpressKokos Profil |
Ochrana:
$action = $_GET['action']; $action = mysqli_real_escape_string($conn, $_GET['action']); if ( $action == 'star') { $mysqli->query("UPDATE private_message SET star='1' WHERE id='".$_GET['id']."' AND mess_id='1'");} $conn je variable připojení do databáze |
||
Ikki Profil |
#4 · Zasláno: 20. 10. 2017, 15:12:21
SQL Injection jsem si vědom, ačkoli mi způsob podmínky který jsi napsal nefungoval, tak jsem to zkusil takto.
Bohužel v případě, že to takto opět zapíši, tak stránka vyhodí chybu 500, prozatím není potřeba řešit zabezpečení když funkce sama o sobě nefunguje. |
||
WordpressKokos Profil |
#5 · Zasláno: 20. 10. 2017, 15:15:05
Error 500, to znamená že jsi se špatně připojil do databáze ne ?
Jak jsem řekl musíš nahradit $conn tvým připojením. Zkontroluj jestli se správně připojuješ na databázi všude kde je to potřeba. |
||
Ikki Profil |
Tvůj způsob se vůbec nevyužil, jelikož problém nastává v případě kdy využiji zápis podmínky od @Keeehi, jakmile jí přepíšu na cokoli jiného tak to opět funguje.
Připojení k databázi je v pořádku, jelikož v dané záložce je X dalších věcí využívajících SQL příkazy a vše kromě tohoto funguje. // V případě, že využiju tvůj způsob, tak se opět dostávám do situace kdy to nefunguje, zkrátka hodnota se v databázi nezmění. |
||
Keeehi Profil |
#7 · Zasláno: 20. 10. 2017, 15:26:29
A dostane se skript dovnitř podmínky?
if(isset($_GET['action']) && $_GET['action'] == 'star'){ echo "inside"; $mysqli->query("UPDATE private_message SET star='1' WHERE id='".$_GET['id']."' AND mess_id='1'"); } |
||
TomášK. Profil * |
#8 · Zasláno: 20. 10. 2017, 15:30:57
WordpressKokos:
Rady, které tu dáváš, jsou špatné nebo zavádějící. V #3 escapuješ do proměnné $action , což nemá žádný význam, protože jednak výsledek poté porovnáváš na rovnost s řetězcem 'star' a druhak proměnnou v SQL dotazu vůbec nepoužiješ. $_GET['id'] , kvůli které může dojít k SQL injection, vůbec neošetřuješ.
Error 500, to znamená že jsi se špatně připojil do databáze ne Error 500 znamená, že došlo v chybě na straně serveru. Špatné připojení k databázi je jen jeden z mnoha důvodů, proč k němu mohlo dojít. Tedy ano, zkontrolovat připojení dává smysl, ale Error 500 neznamená, že se špatně připojil do databáze. |
||
Ikki Profil |
#9 · Zasláno: 20. 10. 2017, 15:34:53
Když použiju to co jsi zaslal, tak jsem opět na chybě 500, tentokrát chyba nastává i v případě kdy podmínku IF přepíšu do špatného formátu se kterým se alespoň stránka načetla.
Vím, že to bude asi hloupý dotaz, ale umístnění v kódu by na to vliv mít nemělo když je to podmínka zakládající se na GET, nebo se pletu? |
||
TomášK. Profil * |
#10 · Zasláno: 20. 10. 2017, 15:47:08
Ikki:
Zřejmě je s tím SQL dotazem nějaký problém. Buď není správně připojení k databázi nebo neexistuje sloupec / tabulka v dotazu. Pokud server vrátí chybu 500, tak obvykle někam zaloguje, o jakou chybu se konkrétně jedná. Můžou existovat dva logy, jeden pro PHP, druhý pro web server. Zkus se po nich podívat a najít chybovou hlášku. Bude se to hodit i pro případné další chyby. |
||
Keeehi Profil |
#11 · Zasláno: 20. 10. 2017, 15:47:48
Ikki:
„Když použiju to co jsi zaslal, tak jsem opět na chybě 500“ Zapni si prosím tě výpis chyb. Pak neuvidíš obecnou 500 stránku ale normální s výpisem chyby. |
||
Ikki Profil |
#12 · Zasláno: 20. 10. 2017, 17:08:47
Omlouvám se za pozdní odpověď, musel jsem zařídit něco v práci.
V případě tohoto zápisu - if(isset($_GET['action']) && $_GET['action'] == 'star'){ $mysqli->query("UPDATE private_message SET star='1' WHERE id='".$_GET['id']."' AND mess_id='1'");} (řádek 56)
mi web vyhodí chybu Parse error: syntax error, unexpected 'Â ' (T_STRING) in /***/messages.php on line 56
|
||
WordpressKokos Profil |
#13 · Zasláno: 21. 10. 2017, 18:31:45
$action = $_GET['action']; $action = mysqli_real_escape_string($conn, $action); omlouvám se, ochrana je tento kód až zprovozníte query. |
||
Ikki Profil |
#14 · Zasláno: 21. 10. 2017, 21:48:11
Ochranu vůbec neřeším, té jsem si vědom.
Problém mám stále s QUERY, jelikož v případě jednom to nefunguje a v případě druhém to hází nesmyslnou chybu, každopádně děkuji i za tvůj příspěvek <3 |
||
Časová prodleva: 5 dní
|
|||
Ikki Profil |
#15 · Zasláno: 26. 10. 2017, 18:15:04
Byl by ještě nějaký nápad jak na to?
|
||
Časová prodleva: 6 let
|
0