SQL-injektiota odotellessa

Anonyymi

Miten tämä toteutetaan prepare-toimintoa käyttäen

$query = "SELECT * FROM customers WHERE country = '$country' AND lastname LIKE '%$search_lastname%' ORDER BY lastname COLLATE utf8_swedish_ci";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
$nro=$nro 1;
include('print.php');
}
}

Pitäisi myös saada tietoja kuljetettua tuohon print.php. Nyt menevät, mutta toimiiko samoin preparen jälkeen.

49

996

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Hiljaista on prepare-rintamalla...

      Mikäli tuo kysymyksesi on yhä vastausta vailla, niin lähetä sähköpostia. Saat sitten paluupostina toimivaksi testatut pienet esimerkkitiedostot, missä preparella tietokannan taulusta insertattu data siirtyy muuttujiin ja sitä kautta include-tietoston tarpeisiin.

      • Anonyymi

        Laita pastebiniin ja linkki tänne.


      • Kyseessä on esimerkki missä on taulurakenteet valmiina omia kokeiluja varten ja kaksi tiedostoa linkattu toisiinsa. Toimii paremmin kun sen postaa pakettina. Välttyy niin monilta väärinkäsityksiltä.


      • Anonyymi
        Faktantarkistus kirjoitti:

        Kyseessä on esimerkki missä on taulurakenteet valmiina omia kokeiluja varten ja kaksi tiedostoa linkattu toisiinsa. Toimii paremmin kun sen postaa pakettina. Välttyy niin monilta väärinkäsityksiltä.

        "Kyseessä on esimerkki missä on taulurakenteet valmiina"
        "Toimii paremmin kun sen postaa pakettina."
        Haiskahtaa epälyttävältä toiminnalta.


      • Anonyymi kirjoitti:

        "Kyseessä on esimerkki missä on taulurakenteet valmiina"
        "Toimii paremmin kun sen postaa pakettina."
        Haiskahtaa epälyttävältä toiminnalta.

        Näinä aikoina on syytäkin pitää nenä avoinna.

        Laitoin esimerkkipaketin nyt myös nettiin

        https://tuuletus.net/lataamo/MySQL_Prepare_Example.php

        siltä varalta että et uskalla meiliäsi käyttää.


      • Anonyymi
        Faktantarkistus kirjoitti:

        Näinä aikoina on syytäkin pitää nenä avoinna.

        Laitoin esimerkkipaketin nyt myös nettiin

        https://tuuletus.net/lataamo/MySQL_Prepare_Example.php

        siltä varalta että et uskalla meiliäsi käyttää.

        Jotenka, kun linkiäsi slikkaa, tulee suorittaneeksi sen esimerkin, eikä ladanneeksi, kuten tässä on ollut puhe.


      • Anonyymi kirjoitti:

        Jotenka, kun linkiäsi slikkaa, tulee suorittaneeksi sen esimerkin, eikä ladanneeksi, kuten tässä on ollut puhe.

        Ei ihan noinkaan. :D

        Slikattuasi lataussivulle ja ladattuasi ja purettuasi pakatun zipin joudut ihan itse ensin määrittelemään tietokantayhteytesi, jotta pääset testiä ajamaan :)

        Toki voit lukea purkamasi tiedostot myös editorillasi ilman että luot esimerkin mukaista keissiä. Varmuuden niiden toiminnasta toki saa vain jos näkee vähän vaivaa. Siinä samalla tulee vahingossa oppineeksi ehkä jotain ihan uuttakin.


      • Anonyymi
        Faktantarkistus kirjoitti:

        Ei ihan noinkaan. :D

        Slikattuasi lataussivulle ja ladattuasi ja purettuasi pakatun zipin joudut ihan itse ensin määrittelemään tietokantayhteytesi, jotta pääset testiä ajamaan :)

        Toki voit lukea purkamasi tiedostot myös editorillasi ilman että luot esimerkin mukaista keissiä. Varmuuden niiden toiminnasta toki saa vain jos näkee vähän vaivaa. Siinä samalla tulee vahingossa oppineeksi ehkä jotain ihan uuttakin.

        "MySQL_Prepare_Example.php" ei ole ladattava tiedosto, vaan suoritettava.

        Ellei sitä esimerkkiä voi ladata Pastebiniin ja sieltä kukin sitten antamasi osoitteen pohjalta omalle koneelleen, etsin muita esimerkkejä.


      • Anonyymi kirjoitti:

        "MySQL_Prepare_Example.php" ei ole ladattava tiedosto, vaan suoritettava.

        Ellei sitä esimerkkiä voi ladata Pastebiniin ja sieltä kukin sitten antamasi osoitteen pohjalta omalle koneelleen, etsin muita esimerkkejä.

        OK, kuitti Roger.


      • Anonyymi
        Faktantarkistus kirjoitti:

        Näinä aikoina on syytäkin pitää nenä avoinna.

        Laitoin esimerkkipaketin nyt myös nettiin

        https://tuuletus.net/lataamo/MySQL_Prepare_Example.php

        siltä varalta että et uskalla meiliäsi käyttää.

        Antaisin tälle ison peukun jos pystyisin. Helppo testata itsellä kun speksit oli noin valmiiksi pureskeltu. Näitä lisää kiitoos!


      • Anonyymi
        Anonyymi kirjoitti:

        Antaisin tälle ison peukun jos pystyisin. Helppo testata itsellä kun speksit oli noin valmiiksi pureskeltu. Näitä lisää kiitoos!

        Kukapa muu se kissan hännän nostaa kuin kissa itse.


      • Anonyymi

        Ei kantsi välittää hulluista.
        Kiitos koodista:)


      • Anonyymi kirjoitti:

        Antaisin tälle ison peukun jos pystyisin. Helppo testata itsellä kun speksit oli noin valmiiksi pureskeltu. Näitä lisää kiitoos!

        Peukuttamaan pääset kun luot tunnukset. Eikä edes maksa mitään.


      • Anonyymi kirjoitti:

        Ei kantsi välittää hulluista.
        Kiitos koodista:)

        Pidetään asiaketjut asiaketjuina.

        Tällainen vähemmän esillä olleesta aiheesta tehty avaus ansaitsee enemmän kehuja kuin haukkuja.


      • Anonyymi
        Faktantarkistus kirjoitti:

        Pidetään asiaketjut asiaketjuina.

        Tällainen vähemmän esillä olleesta aiheesta tehty avaus ansaitsee enemmän kehuja kuin haukkuja.

        Kehut jo itse sitä tarpeeksi, anonyymina ja rekattuna vaikkei siihen mitään aihetta ole.


    • Anonyymi

      Täh? Ketjun aloittajana tulen mukaan keskusteluun. Joku muu ehti ehkä esiintyä kysyjänä?! Kävin tässä välillä Euroopan ulkopuolella ja homme keskeytyi. Kiitos vastaajille ja jäniksenä asiaa kehittäneille :-) Testaan huomenissa, kun pyykit on pesty ja silitetty!

      • Anonyymi

        Minä kiitin koodista jäniksenä.
        Seurailen keskusteluja jos niistä saisi jotain omaan reppuun.

        T: Ei alkuperäinen kysyjä.


    • Anonyymi

      Jos siis Uralin tämä puoli on Eurooppaa. Ja oli käynti tuttavan perhejuhlassa, ei bisnestä.
      Asiaan: Hyviä nämä julkiset kysymykset/vastaukset, koska aika nopeasti väärän tiedon papisto ammutaan saarnatuolista alas.

    • Anonyymi

      Ammutaanko heti yksi kuti:
      $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password,
      Miksi tässä on mysql eikä mysqli?

      • PHP Data Objects ja MySQLi eivät ole identtisiä kaksosia.

        PDO -syntaksiin ei iitä ole määritelty ja siksi sen itsepäinen lisääminen aiheuttaa virheen. On oma valintasi käytätkö MySQLi-proseduuria vaiko PDO-proseduuria. Arvelisin itse että PDO on monipuolisempi ja sillä lienee kirkkaampi tulevaisuus kuin mySQLi:lla, mutta tulevaisuus näyttää miten lopulta käy.. Googlaamalla löydät helposti lisätietoja näiden kahden eroista käytännössä.

        Kysyjälle tehdyssä esimerkissä käytin viimeksimainittua.


    • Anonyymi

      No joo, olisikin mielenkiintoista nähdä tuo toteutettuna mysqli-proseduurilla. Eppäilen että molemmat säilyvat kylläkin.

      • Lisäsin pitkin hampain yhden version pyydetystä mysqli-vaihtoehdosta, vaikka ystävällisesti kehotankin kaikkia aihetta vasta alkumetreillä opiskelevia panostamaan siihen PDO-vaihtoehtoon ensisijaisesti.

        Jos testeissänne huomaatte ongelmia, niin ne menee hätäisesti hutaistun työn piikkiin ja sori siitä jo etukäteen.


    • Anonyymi

      On nimimerkki Faktantarkistus koodaaja paikallaan :) Tällainen harrastajilla annettu ohjaus osaltaan lisää tietoturvaa ja tpivottavasti myös tietoisuutta siitä. Toisaalta, jos aloittaminen on kovin (liian) helppoa, syntyy roskaa ja vaaroja, jos tehdään jotain herkkää ja arvokasta. Mutta on sitä sattunut ammattilaisillekin ja miljardifirmoille. Salasana on testaus ja tarkistus ja sitten vielä testaus ja koodin kaikin puolinen rääkkäys, mutta suunnitellusti ja dokumentoidusti. Nimim testaaja

      • OK, tulkitsen viestisi kauttarantain niin että sait esimerkkifailit toimimaan omassa localhost/server -ympäristössäsi ja ymmärsit näiden kahden puheena olleen "protokollan" välisen eron. Sitten eikun soveltamaan aihetta omissa projekteissa, niin kauan kun teema on kirkkaana mielessä.

        Esitettyyn kysymykseen vastattu -> case closed.

        Ylläpito saa poistaa :)


      • Anonyymi
        Faktantarkistus kirjoitti:

        OK, tulkitsen viestisi kauttarantain niin että sait esimerkkifailit toimimaan omassa localhost/server -ympäristössäsi ja ymmärsit näiden kahden puheena olleen "protokollan" välisen eron. Sitten eikun soveltamaan aihetta omissa projekteissa, niin kauan kun teema on kirkkaana mielessä.

        Esitettyyn kysymykseen vastattu -> case closed.

        Ylläpito saa poistaa :)

        Varsinainen satusetä. Tulipahan yksi verkko-osoite bannattujen listalle lisää.


      • Anonyymi
        Anonyymi kirjoitti:

        Varsinainen satusetä. Tulipahan yksi verkko-osoite bannattujen listalle lisää.

        Taidat olla vähän..


      • Anonyymi
        Anonyymi kirjoitti:

        Taidat olla vähän..

        se on avohoitopotilas
        vihaa muita ihmisiä
        tuntee olonsa loukatuksi ja siksi yrittää loukata toisia
        yleensä vaaraton mutta en ottaisi naapuriksi


    • Anonyymi

      Olisiko turvallisempi käyttää jotain NoSQL:ää? Vaikka CouchDB:tä, joka ymmärtää JSONia sellaisenaan. http://couchdb.apache.org/

    • Anonyymi

      Annettu PDO-esimerkki toimi hienosti localhostissa.
      Webhostissa tulee virheilmoitus
      Virhe: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected
      Eikä auta vaikka laittaa taulun sijalle lauseeseen tietokanta.taulu, kuten jossakin palstalla neuvottiin.
      Alanko sittenkin vääntää mysqlin kanssa?

      • Anonyymi

        Tämä "Faktantarkistus" ei ymmärrä mitään tietokannoista, ei kannata uskoa sen höpötyksiä.


      • Anonyymi
        Anonyymi kirjoitti:

        Tämä "Faktantarkistus" ei ymmärrä mitään tietokannoista, ei kannata uskoa sen höpötyksiä.

        Sinulla on mitä ilmeisemmin jotain henkilökohtaista kaunaa.
        Voisitko avata että miten tämä henkilö on sinua loukannut.
        Ilmeisesti jotenkin tylysti kommentoinut sinun kirjoitukseen?


      • Anonyymi
        Anonyymi kirjoitti:

        Tämä "Faktantarkistus" ei ymmärrä mitään tietokannoista, ei kannata uskoa sen höpötyksiä.

        SQL-löylykauhan.. SQLSTATE[PERVOKIRJASTO]


      • Anonyymi
        Anonyymi kirjoitti:

        Sinulla on mitä ilmeisemmin jotain henkilökohtaista kaunaa.
        Voisitko avata että miten tämä henkilö on sinua loukannut.
        Ilmeisesti jotenkin tylysti kommentoinut sinun kirjoitukseen?

        Miksi siinä pitää olla henkilökohtaista, jos on todennut etet ymmärrä tietokannoista tuon taivaallista. Jos olisin kehunut, olisiko sekin ollut henkilökohtaista. Älä puhu paskaa, ja esiinny rekisteröidyllä tunnuksella, eikä koko ajan vaihtaen rekisteröidyn- ja anonyymi- tunnuksen välillä.


      • Anonyymi
        Anonyymi kirjoitti:

        Miksi siinä pitää olla henkilökohtaista, jos on todennut etet ymmärrä tietokannoista tuon taivaallista. Jos olisin kehunut, olisiko sekin ollut henkilökohtaista. Älä puhu paskaa, ja esiinny rekisteröidyllä tunnuksella, eikä koko ajan vaihtaen rekisteröidyn- ja anonyymi- tunnuksen välillä.

        Ottaako pataan?


      • Anonyymi
        Anonyymi kirjoitti:

        Miksi siinä pitää olla henkilökohtaista, jos on todennut etet ymmärrä tietokannoista tuon taivaallista. Jos olisin kehunut, olisiko sekin ollut henkilökohtaista. Älä puhu paskaa, ja esiinny rekisteröidyllä tunnuksella, eikä koko ajan vaihtaen rekisteröidyn- ja anonyymi- tunnuksen välillä.

        Surullista ettet pääse patoutumistasi.
        Lisäksi häiritset muita. Ei pitäisi olla niin itsekäs että pilaa muidenkin elämää.

        Kyllä vihasta ja katkeruudesta voi päästä eroon.
        Se on mahdollista.
        Helpottaa itsesi ja muiden (jos osaat ajatella muitakin) elämää.


      • Anonyymi
        Anonyymi kirjoitti:

        Ottaako pataan?

        Myönnä itsellesi mistä kauna johtuu.

        Pääset tunteitesi yläpuolelle ajattelemaan älylläsi.

        Jos joku on loukannut sinua, niin ihminen hänkin on virheineen.

        Luulen että lopulta on parempi fiilis kun ei tarvitse koko ajan hiillostaa jotain.


      • Anonyymi

        En, etkö sinäkään.


      • Anonyymi
        Anonyymi kirjoitti:

        Myönnä itsellesi mistä kauna johtuu.

        Pääset tunteitesi yläpuolelle ajattelemaan älylläsi.

        Jos joku on loukannut sinua, niin ihminen hänkin on virheineen.

        Luulen että lopulta on parempi fiilis kun ei tarvitse koko ajan hiillostaa jotain.

        Faktantarkistus, minä en edelleenkään usko sinun tietävän tietokannoista mitään, vaikka kuinka kyseenalaistaisit henkisen terveyteni. Sen sijaan pidän sinua hyvin epämiellyttävänä keskustelukumppanina.

        Osoittaisit jotain tietäväsi, mutta mitenkös sellainen tehdään kun tietotaito puuttuu, niinpä poljetaan maanrakoon epäilijät, sillähän siitä päästään.


      • Täällähän on vekkuli tunnelma viikonlopun kynnyksellä :)

        Tuo mainitsemasi virheilmoitus viittaa vahvasti siihen, että $servername on unohtunut vaihtaa asianmukaiseksi, eli localhostista johonkin xxx.xxx.xx muotoiseen tietokantasi palvelimen osoitteeseen. Ainakin omassa testissä scripti rullasi vain sitä yhtä asetusta vaihtamalla edelyttäen tietysti että se testitaulukin on aluksi muistettu luoda.

        Hyvää viikonloppua!


      • Anonyymi
        Faktantarkistus kirjoitti:

        Täällähän on vekkuli tunnelma viikonlopun kynnyksellä :)

        Tuo mainitsemasi virheilmoitus viittaa vahvasti siihen, että $servername on unohtunut vaihtaa asianmukaiseksi, eli localhostista johonkin xxx.xxx.xx muotoiseen tietokantasi palvelimen osoitteeseen. Ainakin omassa testissä scripti rullasi vain sitä yhtä asetusta vaihtamalla edelyttäen tietysti että se testitaulukin on aluksi muistettu luoda.

        Hyvää viikonloppua!

        Ihmeellistä sönkkäämistä.


    • Anonyymi

      Ongelmasta jatkoa (häiriköistä viis): Voisiko johtua
      $servername = "localhost"; => toimii
      $servername = "mysql99.webhost.fi:9999"; =>ei toimi
      nimessä on pisteitä ym

    • Nopealla googlauksella pisti silmään muutamia esiintuotuja PDO-ongelmia juurikin $servernamessa olevan portin kanssa. Asia saattaisi selvitä ihan sillä että kysäiset asiaa webhostisi aspasta. Minulla on oletusportit eli en ole joutunut niiden kanssa säätämään ja en osaa asiassa jeesata enempää.

      • Vai olisiko se portin määritys peräti noin helpoksi tehty eli erotetaan se syntaksissa omaksi osakseen $servernamen ja dbnamen väliin:

        new PDO("mysql:host=$servername;port=XXXX;dbname=db_name", $username, $password)


      • Anonyymi

        " en osaa asiassa jeesata enempää"
        Sitähän minä olen koko ajan sanonut, ettet sinä tietokannoista mitään tiedä, kunhan vain sönkötät paskaa aikasi kuluksi.


    • Anonyymi

      "Vai olisiko se portin määritys peräti noin helpoksi tehty"
      Kyllä vain, näin toimii. Ja edelliseen eriävä mielipide.

    • Anonyymi

      Miksi PDO-esimerkissä ei lomakkeelta tulevaa syöttöä putsata?

      • Kaikissa tilanteissa on syytä tarkastaa lomakkeilta tuleva syöttö. Mieluummin siis ylivarovainen kuin huoleton.

        Tässä esimerkissä ei ole formia edes rakennettu ja tarkoitus oli aluperinkin vastata demoamalla ketjun aloittajan kysymykseen siitä miten preparea käyttäen tietokannasta luettava data ohjataan includella lisättävään scriptiin. Siltä osin asia lienee ratkennut ja kysyjä etenee projektissaan. Tarkoitus ei ole ollut edes yrittää rakentaa kaikki poikkeusolot huomioivaa tietojen syöttölomaketta. Niitä löytyy googlaamalla.

        Kuten aina, asioilla on tapana lähteä lapasesta. Päivitin vielä kerran esimerkkifaileja edellä esille nousseen tärkeän portti-määrityksen osalta sekä hienosäädin vähän "trimmausta" siltä osin ettei tyhjää hyväksytä tietokantaan tallennettavaksi.

        Oikeassa elämässä on usein tarpeen rajoittaa vaikkapa lomakkeilla syötettäessä sallittavia merkkejä (nimissä ei sallita numeroita, syöttöjen minimi- ja maksimipituudet, jne), mutta tämä menee jo liian kauas ketjun alkuperäisestä aiheesta. Se siitä sitten.


    • Anonyymi

      The main difference between PDO and Mysqli is that PDO supports various databases and mysqli supports only MySQL. MySQLi is also a bit faster. PDO supports 12 different drivers, opposed to MySQLi, which supports MySQL only. So about security there's no difference because they both use prepared statements with escaping.

    • Anonyymi

      Kysyjäkin kommentoi:
      Tässäkin tapauksessa homma lähti lapasesta. Piti vain päivittää kaveriapuna muutama pikkuinen juttu sovellukseen, jonka ylläpito oli "kadonnut"...
      Mutta tulipa samalla vastaisen varalle myös tietoa ja loistavat esimerkit!

    Ketjusta on poistettu 6 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Tirkistelijä T...

      Tirkistelijä T... ei ole sokeutunut, vaikka näin juorutaan. Asuu nykyään Limingassa ja jatkaa sekopää touhujaan ainakin
      Haapavesi
      3
      1744
    2. Liian kiltti.. ?

      Tässä jo jonnunaikaa olen tuumaillut tätä kiltti ja kunnollinen juttua. Siis miksi oikeasti kiltit eivät muka kelpaa?
      Sinkut
      215
      1367
    3. Koettakaa nyt Trumpinkin fanit ymmärtää:

      Hän on myös jo vanha mies. Kukaan ei tiedä, mitä kunnossa hän on parin vuoden päästä.
      Maailman menoa
      239
      1336
    4. 1982 syntynyt Mahdi Alcheikh tuomittiin törkeästä lapsenraiskauksesta

      https://www.mtvuutiset.fi/artikkeli/mies-raiskasi-15-vuotiaan-uimahallissa-turussa/8964984 Yli 4 vuotta vankeutta Oike
      Oulu
      44
      1189
    5. Pääsit nainen todella

      lähelle ja kaikki sinussa oli jotain selittämättömän kiehtovaa. Silti en koskaan ymmärtänyt sinua täysin. Mitä halusit t
      Ikävä
      98
      1167
    6. Kiitos, kun paljastit

      Vaikka mä tiesinkin! Nyt voi ottaa seuraavan askeleen? Hyvää yötä:)
      Ikävä
      11
      1099
    7. En saa unta kun ajattelen

      Sinua mies. Sydäntä ahdistaa meidän välit 😌😞
      Ikävä
      66
      1073
    8. Voiko 40 tai yli

      Enää rakastua vai onko se jo game over?!
      Ikävä
      151
      1068
    9. Kansan vihaama elokapina aikoo pysäyttää moottoritien ruuhka-aikana

      Mielenosoitus alkaa perjantaina kello 15 Länsiväylän ja Porkkalankadun risteyksessä. On se kummallista, että tuollainen
      Maailman menoa
      256
      1036
    10. Trallalaa kesä on

      Helteinen ja kuuma. Hyvää huomenta. ☀️😊🫶🏼🍍❤️🐦‍⬛
      Ikävä
      189
      883
    Aihe