the ultimate protection against php/mysql injection attacks

een lange tijd geleden was ik een noob met php
om eerlijk te zijn ^^ ik wist niks, ik probeerde het te leren en uiteidelijk, -->snap<-- ik het nu.
ik kan het nog niet schrijven zo 123 uit me hoofd maar goed :)

ik was bezig met een site, en ik had hiervan een login scriptje gebruikt, en dat werkte, (niet te weten van injection attacks) een vriend van mij die zij, back-up je mysql database, dan ga ik proberen je database the vernietigen :), ik dacht het zou hem nooit lukken, maar uiteidelijk was mijn table users weg...

nu zat ik te denken en te denken, hoe ik dat zou kunnen verkomen

mijn oplossing:

1)je moet 2 users hebben in je msql database
2)dus geen gratis host :)

je moet in je database 1 user full write acces geven, en de andere allees lees acces

daarbij moet je -->2<-- mysql config files maken

dit weet idereen wel :)

<?php
// include/require deze in register pagina's
$m_usr="johan_fullacces";
$m_pass="";
$m_host="localhost";
$m_db="users";
?>


<?php
// include/require deze in je alleen member pagina's
$m_usr="johan_readonly";
$m_pass="";
$m_host="localhost";
$m_db="users";
?>

dit is een theorie van mij, zelf denk ik dat dit het moet tegen houden

bewijs iemand het tegen deel maar :)

Ik vertrouw gewoon user input nooit, dus de gebruikelijke mysql_real_escape_string en nog wat andere trucjes voordat je iets met de database ga doen.

Tevens kan je hier zien dat ik meestal een aparte gebruiker aanmaak, met enkel rechten voor 'één' database ipv alle (gebruik dus nooit je 'root' account.

Voorbeeld:


Worst case senario word nu dus enkel je 'forum' database verwijderd. Als je helemaal op save wilt spelen maak je er enkel GRANT SELECT , INSERT , UPDATE , DELETE van... dan kan in het ergste geval enkel de data verwijderd worden.


Het is inderdaad een oplossing.. Ik neem aan dat je in je pagina's waarin je items uit je db kan bewerken of er items aan kan toevoegen wel je "full_acces" account hebt toegevoegd. (ik zou trouwens nooit full access doen, maar bijv alleen record verwijderen, ipv een hele tabel). En dan ga ik er ook vanuit dat je die pagina's voor het bewerken met een beveiligingsscript hebt beveiligd tegen onbevoegde users.
Bij een forum kan je dan bijvoorbeeld voor de "reply of create topic" pagina's alleen toestemming geven voor een insert of een update query (evt in combinatie met SELECT)
Daarmee voorkom je dat dan een DROP TABLE kan worden uitgevoerd. Je krijgt dan wel veel mysql_accounts, maar dan heb je wel een goede beveiliging.

Reageren