externe website laten lezen uit database
Dit is wat ik heb gedaan:
1.
Code (php)
1
2
2
mysql> GRANT SELECT ON mijndatabase.mijntabel TO nieuwegebruiker@ipadres-van-externe-website IDENTIFIED BY wachtwoord;
2. open port 3306 mysql
Code (php)
1
2
2
sudo iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d ipadresexternewebsite --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -s ipexterneadreswebsite --sport 3306 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -s ipexterneadreswebsite --sport 3306 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
config van *.php pagina op de externe website die contact gaat maken met mijn server
Code (php)
1
2
3
4
2
3
4
$host = "ipadres van mijn server";
$user ="nieuwegebruiker";
$passwd = "wachtwoord"';
$db = "mijndatabase";
$user ="nieuwegebruiker";
$passwd = "wachtwoord"';
$db = "mijndatabase";
Vergeet ik iets of wat doe ik verkeerd?
Herstart?
123.123.123.123:24356
In de router portforwarding van 24356 naar 3306.
Vervolgens in MySQL een unieke gebruiker met het remote ipadress aangemaakt voor alleen die verbinding.
Ik gebruik adminer.php vvor het beheren van de database.
Gewijzigd op 17/01/2017 00:01:04 door Adoptive Solution
Eerste probleem dat je zou kunnen hebben: de server met de website moet verkeer naar buiten over poort 3306 toestaan.
Dan moet de ontvangende server (met de db) poort 3306 open hebben staan. Dat doe je met iptables;
Dan moet mysqld ook nog verkeer van buiten aankunnen:
https://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html
zie my.cnf
En tenslotte moet inderdaad met GRANT een zekere user toestemming krijgen om te connecten (vanaf het ip van de website)
--
Wat als je met telnet probeert vanbuiten de database te benaderen?
$ telnet ipvandatabaseserver 3306
Gewijzigd op 17/01/2017 13:50:58 door John D
Het is gelukt, na een herstart en in my.cnf heb ik de de localhostip weggehaald.
Uit interesse, waarom zijn de SQL-database en de website beide op een gescheiden netwerk? Of is het zo dat je externe personen/bedrijven toegang verschaft tot je database?
Beiden. Er is een website op dezelfde server als de database die er gebruik van maakt en er is extern een website (een proefopzetje).
Als je externe personen toegang verschaft, zou ik eerder een op maat gemaakte API maken die alleen de data verschaft die ze nodig hebben. Het zou rot zijn als ze bijvoorbeeld toegang hadden tot (gehashte) wachtwoorden of financiële gegevens.
Ik ben wel geinteresseerd om een api te maken maar hpoe doe je dat, waar begin ik? (ik had eerst wat gestoeid met curl) maar mijn website heeft auth. en ik kreeg het niet voor elkaar.
Hoe je dat kan bouwen? Gewoon in PHP, en de output bijvoorbeeld in XML of JSON teruggeven.
- Ariën - op 18/01/2017 22:46:51:
en de output bijvoorbeeld in XML of JSON teruggeven.
Hier ben ik de draad al kwijt:)
https://nl.wikipedia.org/wiki/JSON
https://nl.wikipedia.org/wiki/XML
Het zijn gestandaardiseerde gegevensformaten die je kan gebruiken om data gestructureerd uit te kunnen (laten) lezen. Bij een API bepaalt de gebruiker welke data hij ophaalt. Dit kan door middel van een (GET-)parameter in de URL zijn, of een POST-parameter. Zo beslis je wat iemand uit mag lezen. Je kan ook authenticatie aan API's toevoegen.
JSON is tegenwoordig het meest gangbaar.
https://nl.wikipedia.org/wiki/XML
Het zijn gestandaardiseerde gegevensformaten die je kan gebruiken om data gestructureerd uit te kunnen (laten) lezen. Bij een API bepaalt de gebruiker welke data hij ophaalt. Dit kan door middel van een (GET-)parameter in de URL zijn, of een POST-parameter. Zo beslis je wat iemand uit mag lezen. Je kan ook authenticatie aan API's toevoegen.
JSON is tegenwoordig het meest gangbaar.
Gewijzigd op 18/01/2017 22:58:19 door - Ariën -
- Ariën - op 18/01/2017 22:46:51:
Ze kunnen dan gewoon je hele database doorspitten. En dat is niet waar je op staat te wachten.
Niet per definitie: wanneer je een GRANT SELECT ON [tabelnaam] geeft kan alleen op de genoemde tabel geselecteerd worden. Dat bespaart je dan weer het bouwen van een API. Makkelijk wanneer het slechts om 1 andere site gaat en niet om een algemeen beschikbare API. Wil je slechts enkele velden van die ene tabel beschikbaar stellen dan kan je ook nog een keer een view maken op die tabel en die beschikbaar stellen. MySQL CREATE VIEW
Gewijzigd op 19/01/2017 10:44:52 door Aad B
Marina janssen op 18/01/2017 22:44:37:
Ik ben wel geinteresseerd om een api te maken maar hpoe doe je dat, waar begin ik? (ik had eerst wat gestoeid met curl) maar mijn website heeft auth. en ik kreeg het niet voor elkaar.
Ik heb geen ervaring met het bouwen van een API maar moest toevallig vorige week voor een site gegevens van de RDW via hun API ophalen. Dat doe je via een link. Als je bijvoorbeeld informatie van een voertuig op kenteken wilt ophalen dan gebruik je deze link:
https://opendata.rdw.nl/resource/m9d7-ebf2.json?kenteken=95NHNB
Als je hem gewoon in je browser plakt dan zie je wel wat je terug krijgt.
Je geeft een gebruiker op een gecontroleerde manier gegevens uit een database die je op zo'n manier aanbied (JSON of XML) dat de gebruiker deze weer verder kan verwerken.
In dit geval zit er achter de link een script dat verbinding maakt met de database, de rij selecteerd die als kenteken 95NHNB heeft (die via $_GET uit de url gehaald wordt) en alle informatie die de gebruiker te zien mag krijgen vervolgens teruggeeft. De gebruiker kan hier dus niet zelf bepalen welke kolommen hij selecteerd, dat doet de API.
Je kan hierbij ook nog gebruik maken van extra authorisatie, een token wat je controleerd.
Dit kun je laten aanroepen door een andere site, maar ook bijvoorbeeld door een app op een telefoon
Ik kan met Curl toch doen wat ik wilde zonder dat ik databasetoegang hoef te geven. Ik weet niet of dit bedoeld werd met een api bouwen? Ik ben wel weer wat wijzer geworden
Als je een API bouwt heb je aan de API kant niets te maken met curl. Een API is in feite niet meer of minder dan een php script dat gegevens kan verwerken en uitpoepen.
Mijn website is https en heeft basic auth. maar de website die een pagina gaat curlen uit mijn website is nog http.
1. Is het veilig als ik dit invul op die http pagina?
Code (php)
1
2
2
curl_setopt($curl, CURLOPT_USERPWD, "user:wachtwoord");
curl_setopt ($curl, CURLOPT_URL, "https://mijnwebsite/curlpagina.php");
curl_setopt ($curl, CURLOPT_URL, "https://mijnwebsite/curlpagina.php");
2. Sommige images worden geladen op de http website en het slotje van de curlpagina op mijn https website (die linkjes heeft naar die images) zegt nu "de verbinding is niet beveiligd", sommige onderdelen kunnen door anderen bekeken worden. Hoe gevaarlijk is dit? Die fotos zijn toch al openbaar te zien op die andere website. Loopt mijn site toch risico op een of andere manier?
Op nummer 2: wanneer je https gebruikt dien je ALLE verkeer over https te laten lopen. Images, scripts, css, the works. Wanneer je dit niet doet kunnen requests naar plaatjes e.d. onderschept worden en eventueel worden herschreven. https is niet alleen het versleutelen van verkeer, maar ook het garanderen van de identiteit van de server.
Een nadeel is dat als je bijvoorbeeld een website hebt waar mensen hun eigen content op kunnen plaatsen (denk aan een forum), dat alle plaatjes waarnaar ze eventueel verwijzen ook daadwerkelijk https moeten zijn. Je zult dus op dit moment ook moeten controleren op het protocol.
Ikzelf heb hiervoor een Camo-proxy gevonden die http plaatjes in een proxy doorgeeft naar een https-verbinding. Het enige wat je nodig hebt is een eigen server hiervoor.
Als ik binnenkort tijd heb zal ik eens kijken of ik een simpele handleiding kan schrijven in de vorm van een tutorial.