externe website laten lezen uit database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Marina janssen

marina janssen

16/01/2017 23:20:15
Quote Anchor link
Ik probeer het mogelijk te maken dat een website die zich elders bevindt bepaalde gegevens uit mijn database kan ophalen, tot nu toe zonder het gewenste resultaat want de website kan geen verbinding maken ( Can't connect to MySQL server)

Dit is wat ik heb gedaan:
1.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2

 mysql> GRANT SELECT ON mijndatabase.mijntabel TO nieuwegebruiker@ipadres-van-externe-website IDENTIFIED BY wachtwoord;


2. open port 3306 mysql

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

config van *.php pagina op de externe website die contact gaat maken met mijn server

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$host = "ipadres van mijn server";
$user ="nieuwegebruiker";
$passwd = "wachtwoord"';
$db = "mijndatabase";


Vergeet ik iets of wat doe ik verkeerd?
 
PHP hulp

PHP hulp

25/04/2024 15:02:41
 
Thomas van den Heuvel

Thomas van den Heuvel

16/01/2017 23:55:06
Quote Anchor link
Herstart?
 
Adoptive Solution

Adoptive Solution

16/01/2017 23:59:36
Quote Anchor link
Ik heb achter het ipnummer een willekeurig portnumner gezet :

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
 
Ivo P

Ivo P

17/01/2017 10:09:54
Quote Anchor link
kun je vanaf de server van de remote website wel de server met de database bereiken op poort 3306?

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
 
John D

John D

17/01/2017 11:27:46
Quote Anchor link
Het mysql proces mysqld "luistert" default alleen op localhost 127.0.0.1 is wat Ivo bedoelt en dat is waarschijnlijk dat wat je nog moet configureren. De kans bestaat dat je dan ook je eigen php scripts waarin "localhost" staat ook aan moet passen. Gebruik daarvoor in de plaats nu het ipnummer van de server en dus niet het ipnummer van buiten tenzij de server direct aan internet hangt uiteraard (zonder NAT dus). Na het aanpassen moet je de mysqld herstarten. Zie ook de telnet-tip van Ivo.
Gewijzigd op 17/01/2017 13:50:58 door John D
 
Marina janssen

marina janssen

18/01/2017 17:25:52
Quote Anchor link
Het is gelukt, na een herstart en in my.cnf heb ik de de localhostip weggehaald.
 
- Ariën  -
Beheerder

- Ariën -

18/01/2017 18:51:02
Quote Anchor link
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?
 
Marina janssen

marina janssen

18/01/2017 19:57:30
Quote Anchor link
Beiden. Er is een website op dezelfde server als de database die er gebruik van maakt en er is extern een website (een proefopzetje).
 
- Ariën  -
Beheerder

- Ariën -

18/01/2017 22:28:32
Quote Anchor link
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.
 
Marina janssen

marina janssen

18/01/2017 22:44:37
Quote Anchor link
Ik heb alleen GRANT SELECT ON toegestaan,daarmee kunnen ze toch geen wachtwoorden opvragen?
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.
 
- Ariën  -
Beheerder

- Ariën -

18/01/2017 22:46:51
Quote Anchor link
Ze kunnen dan gewoon je hele database doorspitten. En dat is niet waar je op staat te wachten.

Hoe je dat kan bouwen? Gewoon in PHP, en de output bijvoorbeeld in XML of JSON teruggeven.
 
Marina janssen

marina janssen

18/01/2017 22:53:41
Quote Anchor link
- 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:)
 
- Ariën  -
Beheerder

- Ariën -

18/01/2017 22:57:27
Quote Anchor link
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.
Gewijzigd op 18/01/2017 22:58:19 door - Ariën -
 
Aad B

Aad B

19/01/2017 10:40:56
Quote Anchor link
- 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
 
Marlies Maalderink

Marlies Maalderink

19/01/2017 10:49:31
Quote Anchor link
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.
 
Ivo P

Ivo P

19/01/2017 11:10:50
Quote Anchor link
De output die je krijgt via de link van Marlies, haal je door json_decode() om de gegevens in een variabele te krijgen.

Dit kun je laten aanroepen door een andere site, maar ook bijvoorbeeld door een app op een telefoon
 
Marina janssen

marina janssen

28/01/2017 20:45:54
Quote Anchor link
Ik heb een goeie handleiding gevonden over Curl (http://www.hackingwithphp.com/15/10/2/your-first-curl-scripts) die stap voor stap uitlegt hoe of wat. Ben er nog steeds mee aan het experimenteren ...
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
 
Ben van Velzen

Ben van Velzen

28/01/2017 21:16:26
Quote Anchor link
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.
 
Marina janssen

marina janssen

28/01/2017 22:16:05
Quote Anchor link
Ik zit nog met 2 vragen:
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
curl_setopt($curl, CURLOPT_USERPWD, "user:wachtwoord");
    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?
 
Ben van Velzen

Ben van Velzen

28/01/2017 22:56:40
Quote Anchor link
Op de eerste vraag: dat levert geen problemen op.
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.
 
- Ariën  -
Beheerder

- Ariën -

28/01/2017 23:14:04
Quote Anchor link
Over puntje 2: Als je maar iets toont binnen je https-omgeving dat naar het onversleutelde http-protocol leidt, dan zal dat door je browser afgestraft worden met een "Mixed content" melding, en zal je groene slotje op dat moment eventjes anders worden in je browser. Afbeeldingen worden nog wel gedoogd, maar ik meen dat javascripts en ik dacht zelfs dat CSS ook geblokkeerd werden.

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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.