Eigen API Maken
Dus hoe voorkom je dit dan? Beetje zoals facebook, daar kan je fql's maken.
Linkje -> https://developers.facebook.com/docs/reference/fql/
Ik denk door de databasen een moeilijke naam te geven? Door bijvoorbeeld de tabel 'users' te veranderen naar 'site_special_us3rs' etc.
#1 - never trust user input. houdt dat in gedachten ;-)
- Diov - op 23/08/2013 16:39:25:
Ja, maar dan kunnen ze ook heel de database leegplunderen, of het wachtwoord opvragen, ook al is die versleuteld.
Dus hoe voorkom je dit dan? Beetje zoals facebook, daar kan je fql's maken.
Linkje -> https://developers.facebook.com/docs/reference/fql/
Dus hoe voorkom je dit dan? Beetje zoals facebook, daar kan je fql's maken.
Linkje -> https://developers.facebook.com/docs/reference/fql/
Natuurlijk niet!
Jouw PHP api pagina is de firewall in deze zaak. Met data UIT de database bepaal JIJ wat wel en niet mag worden verzonden. Met data IN (delete, insert en update) moet je zo goed mogelijk jezelf beschermen door een zogenaamde whitelist aan te houden (een lijst waarin staat wat toegestaan is) en door jezelf tegen sql injectie te beschermen.
een voorbeeldje om jezelf te beschermen is dat een men alleen een gebruiker uit de eigen groep mag wijzigen. dat moet je allemaal in de code opnemen.
Een andere mogelijkheid is tevens om ellende te voorkomen dat je helemaal nooit geen records laat verwijderen maar enkel op nonactief zet aan de hand van een extra kolom met de naam 'active' (standaard true). wel moeten bestaande queries dan uitgebreid worden met 'WHERE `ACTIVE` > 0'
Ik ben nu bezig met gebruikers te laten inloggen, maar dan kom ik op 1 probleem:
Kan ik cookies plaatsen?
Ik bedoel: Ik plaats cookies in de API, komen die dan ook op de browser van die api website?
Zoniet, hoe los ik dat dan op?
ja je kan cookies en sessions gebruiken
Ik raad je sessies aan. Bij het wegklikken van de browser is alles verwijderd. Maak een sessie na het inloggen met login = yes en controleer dat op elke pagina.
Ik raad aan dat bij iedere request de sleutel moet worden meegestuurd voor autorisatie, en raad ten zeerste af om standaard sessies te gebruiken voor api's.
Verder leert de ervaring mij dat een API maken niet zo eenvoudig is zoals een aantal mensen doet voorkomen. Denk bijvoorbeeld aan versie beheer.
Als je een API wilt bouwen zal ik je adviseren om het zo dynamisch mogelijk te houden. Bijv met responseTypes te werken. Misschien wil klant A een XML terwijl B een json wil en weer een ander wilt misschien een opgemaakte html.
Denk ook eena aan desingpatterns die zijn ontzettend handig.
persoonlijk zou ik alleen HAL(Hypermedia Application Language) gebruiken voor het creëren van output voor een api.
Dat met cookies/sessies is opgelost!
@ Local
De sleutel wordt telkens meegegeven als men de api oproept, wat ik sowieso ging doen.
Kan je me wel uitleggen wat HAL precies is? Lijkt nogal ingewikkeld.
@ Michel,
Ik gebruik file_get_contents, en geen cUrl.
Idd, versie beheer is nogal vervelend,
maar ik denk dat je dan eerst zelf moet testen, welke functies niet meer werken etc.
Dan stuur je een mail naar degene die de API gebruikt, met de aanpassingen & dat ze het op één of andere manier kunnen oplossen.
Ik zal het op json houden voorlopig toch, tot ik de vraag krijg voor xml.
Weet niet echt wat designpatterns zijn, kan je het in het kort uitleggen aub?
Nu had ik ook nog een klein vraagje:
Stel, ik gebruik volgende functie om het wachtwoord te controleren als m'n iets wilt aanpassen aan hun gegevens:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
public function checkpass($wachtwoord, $username) {
$json = file_get_contents('http://grufle.com/api/api.php?key='.$this->key.'&action=checkpass&password='.$wachtwoord.'$username='.$username.'');
return json_decode($json);
}
?>
public function checkpass($wachtwoord, $username) {
$json = file_get_contents('http://grufle.com/api/api.php?key='.$this->key.'&action=checkpass&password='.$wachtwoord.'$username='.$username.'');
return json_decode($json);
}
?>
Zou ik dan best niet die gegevens versleutelen met de key?
En als de gegevens bij mij aankomen weer decrypten?
Of is dat overbodig?
Mvg,
Diov