Heippa!
Olen tekemässä C# / forms ohjelmaa, joka on yhteydessä MySQL tietokantaan. Eteenpäin mentäessä tämä suora yhteys tietokantaan on toki otettava pois, sillä siitähän muodostuu oikein näppärä riski. Reverse engineeringillähän kun lähdekoodiin tallennetut tunnus ja salasana on helposti kaivettavissa. Myöskään ulkoiseen tiedostoon salattuna laitettuja tunnuksia ei voi pitää mitenkään turvallisena, koska itse ohjelman on kuitenkin voitava saada nuo selkokielisesti itselleen.
Olenkin tullut siihen johtopäätökseen, että ohjelman ja tietokannan väliin tarvitaan yksi layeri lisää. Three tier architeture:n mukaanhan näin pitää tehdä, mutta käytännön asiat tässä hieman häiritsevät.
Ohjelmanhan on tarkoitus ottaa business logic layeriin yhteyttä, joka hoitaa tietokannasta haun vaatimusten mukaisesti ja palauttaa tiedot asiakasohjelmalle. Näin tietokannan kirjautumistiedot ovat turvassa uteliailta koodipepeiltä.
Varsinainen kysymykseni kuuluukin: Miten tuo keskimmäinen layeri olisi järkevintä toteuttaa ja mitä tekniikkaa hyväksikäyttäen? Verkkotekniikallahan sen hallinnointi olisi selaimella helpointa, mutta olisiko putkalaisilla heittää vinkinpoikasta?
Kiitos!
Web service?
Siis esim json-rpc?
No esimerkiksi. Jos aiot tehdä businesslogiikan ja clientin C#:lla, niin tekisin sen SOAPilla, koska se on niin äärettömän helppoa.
Hmm. Kokeilen nykästä itse Laravelin pohjalta tollasen. Tässä tietenkin tulee taas jonkinmoinen autentikointi kyseeseen, vai onko tähän jotain kivenkovaa keinoa tehdä se "oikein"? Mitään muuttuvia oikeuksia ei voi olla, sillä installerin paketti on aina sama. Käyttäjä saa vain yhden avaimen ohjelmaan, jolla katsotaan saako tiettyjä toimintoja verkon yli suorittaa vai ei.
Eihän tuosta suurta huolta ole, mutta yksi ikävä mahdollisuus on se että joku pommittelee noita key arvoja ja tutkailee palautteita. Senhän voi tietenkin estää kyselyrajoituksilla tai vastaavilla, mutta hieman tuntuu haavoittuvalta kuitenkin. Mahdollisuus väärinkäytökseen on pieni, mutta seuraukset siitäkin on kamalat jos joku niin päättää tehdä. Aikaa ei olisi kuitenkaan mitään UDP hässäköitä alkaa väsäämään.
Voin laittaa noottia miten tuo edistyy.. Kiitosta vinkistä.
No autentikointihan on siis se avain, jonka käyttäjä saa.
Rajoitat virheellisiä yrityksiä samasta IP:stä (vaikka 10 per päivä tai esim. 2^n sekuntia jossa n on yritysten määrä) ja teet avaimista niin pitkiä ettei vaikka miljoonallakaan arvauksella osu.
Ei pidä ajatella liian vaikeasti. Tilannehan on ihan sama kuin tällä sivustolla: loppukäyttäjällä on selain ja HTML-koodi, taustalla on tietokanta, ja välissä on ylimääräinen kerros nimeltä Ohjelmointiputka, jonka kautta pystyy tekemään ilman salasanaa joitain tietokantakyselyitä (mm. viestien lukeminen) ja omalla käyttäjätunnuksella tiettyjä muita kyselyitä (mm. viestien lähetys ja muokkaus). Olet siis tavallaan tullut siihen lopputulokseen, että ei pidä laittaa SQL-kyselyitä ja tietokannan salasanaa nettisivulle (HTML- ja JavaScript-koodiin) vaan palvelimelle, joka sitten tekee sellaisia kyselyitä, joihin käyttäjän oma tunnus oikeuttaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.