Mun täytyy muokata yhtä PHP koodia ja en millään keksi, että miten tulkitaan tälläinen lauseessa oleva kohta `${table}_pages`:
$sql = "UPDATE `${table}_pages` SET se=se+1 WHERE id=$pageid;";
Eli miksi siinä käytetään noin ihmeellisiä lainausmerkkejä ja minkäläiseen muuttujaan toi voi viitata php koodissa? tällaiseen taulukkoon joka on nimellä
$table?
Yritin hakea kaikkia viittauksia tuohon, mutta en meinaa oikein saada varmuutta, että miten toi rakenne toimii ja miten tuossa esiintyvät heittomerkit ja aaltosulut toimii SQL kyselyn kanssa?
`-merkit ovat osa MySQL-lausetta. ${table} viittaa muuttujaan $table. (Ilman sulkuja muuttujaksi tulkittaisiin koko $table_pages.) Jos siis $table sisältää sanan "PUTKA" ja $pageid on 123, tuloksena on
$sql = "UPDATE `PUTKA_pages` SET se=se+1 WHERE id=123;";
SQL-lause korottaa yhdellä se-kentän arvoa PUTKA_pages-taulussa rivillä, jonka id on 123.
Ehkäpä siinä on tarkoitettu seuraavanlaista koodia?
<?php $sql = "UPDATE {$table_pages} SET se=" . ($se+1) . " WHERE id={$pageid}"; echo $sql; ?>
Ei vaan noin kuin Metabolix selitti.
{$table_pages} on eri asia kuin
${table}_pages
Kiitoksia jälleen Metabolix loistavasta vastauksesta!
miten tuo sql-injection toimii php:ssä, onko siinä samoja konnakoukkuja kuin MS SQL?
No PHP:stähän voi käyttää MS SQL:ää ja varmaan kymmentä muuta tietokantaa.
Sinänsä SQL-injektion välttämisessä on huomioitavat asiat pääpiirteissään samat kaikissa tietokannoissa.
Kiitoksia vastauksest Grez, eli oli pakko saada tietää kerta SQL niin siinä ns. hakkerit yrittää käyttää SQL injection esim c# url hakkerointa ja halusin tietää että toimiiko se samalla tavalla kuin PHP.
MS SQL:llä tarkoitetaan normaalisti Microsoftin SQL serveriä. Jos tarkoitit, että toimiiko hakkerointi samalla tavalla, kuin jossain MS:n ohjelmointiympäristössä, jota et alunperin maininnut, niin kysymys oli harvinaisen epäselvä.
En välttämättä vieläkään ole varma, mitä kysyt, koska "C# url hakkerointi" ei ole ainakaan mikään yleisesti tunnettu termi (Google sanoo: Ei tuloksia hakusanoilla "C# url hacking".) C#:ssakin on useita eri tapoja käyttää SQL-kantoja, ja joissakin tavoissa injektioiden estäminen on ohjelmoijan vastuulla ja joissakin järjestelmä pitää ainakin jossain määrin huolen siitä. Samoin PHP:ssä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.