Tekstveld naar bestand

Status
Niet open voor verdere reacties.

Jaspertjeh

Gebruiker
Lid geworden
30 dec 2010
Berichten
765
Hallo Helpmij-leden,

Ik ben op dit moment aan het programmeren maar kom er niet meer uit. Misschien kunnen jullie me helpen.
De bedoeling is om een PHP-pagina te maken met een paar tekstvelden voor de gebruikersnaam, wachtwoord, enzovoort. Deze gegevens moeten dan wanneer de gebruiker op "Ga verder" klikt, automatisch gekopieerd worden in een config.php file die al bestaat. Hoe kan ik dit realiseren?

Mijn dank is groot!
Mvrgr,
Jasper
 
Laatst bewerkt:
Dat kan op zich wel hier staat bijvoorbeeld uitgelegd hoe je naar een tekstbestand kunt schrijven met PHP, denk er daarbij aan dat PHP dat ook moet mogen, het kan dus zijn dat je de toestemmingen voor het bestand aan moet passen. Maar, waarom zet je die informatie niet in een database? Dat werkt een stuk makkelijker.
 
Super! De bedoeling is dat het programma net zoals een database setup is als in Wordpress. Snapt u? Daarom moet de informatie naar een config.php geschreven worden.
 
PHP:
<?php
$username = $_GET['username'];
$password = $_GET['password'];

$toWrite = "Gebruikersnaam: $username\n" .
			"Wachtwoord: $password";

file_put_contents('config.php', $toWrite);
?>

Dan ga je vervolgens naar de url?username=CaptainBri&password=Test

config.php
Code:
Gebruikersnaam: CaptainBri
Wachtwoord: Test
 
eh, bezoekers via GET rechtstreeks naar je config bestand (of welk bestand dan ook) laten schrijven is een extreem slecht idee.
 
Laatst bewerkt:
Daar gaat het hier niet om, het is enkel een demonstratie zodat Jaspertjeh weet hoe hij data in een bestand kan schrijven.
 
Goed, maar zeg er dan tenminste bij dat je voorbeeld in de praktijk een gigantisch veiligheidslek oplevert en dus niet gebruikt moet worden. Iemand die niet beter weet en jouw advies toepast kan net zo goed gelijk z'n volledige broncode aan het eerste de beste scriptkiddie geven.
 
Tsja, dat ligt er helemaal aan wat de misbruiker wil en kan. Maar aangezien hij op deze manier z'n eigen (PHP) code op de site kan zetten zijn de mogelijkheden groot. Om iets te noemen, hij kan Test""; print_r(file(__FILE__))als wachtwoord nemen. In het config bestand wordt dat dan.
PHP:
$Gebruikersnaam = "CaptainBri";
$Wachtwoord = "Test"""; print_r(file(__FILE__));
Met als gevolg dat hij de volledige inhoud van het config bestand te zien krijgt (dus ook andere wachtwoorden die dar mogelijk al in staan. Hetzelfde kan hij doen voor alle andere bestanden op de site. Maar, het is natuurlijk wel een methode die opvalt, alle bezoekers krijgen dat namelijk te zien. Het kan een stuk subtieler, en gevaarlijker. Hij zou bijvoorbeeld code kunnen injecteren waarmee de cookies en sessie-informatie van alle bezoekers naar zijn eigen site worden gestuurd.

En, zelfs al heeft niemand door dat de deur wagenwijd open staat, dan nog kan het flink mis gaan. Stel dat een bezoeker denkt handig te zijn door een sterk wachtwoord met vreemde tekens te kiezen (op zich een goed idee) en n"/*no@n# als wachtwoord invoert. In je config bestand wordt dat

PHP:
$Gebruikersnaam = "CaptainBri";
$Wachtwoord = "n"/*no@n#"; 

hier de rest van het config bestand
Het hele bestand na "/* wordt nu gezien als commentaar en zal dus niets meer doen.

Kortom, zorg dat je altijd goed controleert wat je naar bestanden of database wegschrijft, anders sta je open voor SQL injectie en XSS aanvallen.

NB: De manier waarop je gebruikersnaam en ww opschreef had in PHP trouwens sowieso voor fouten gezorgd.
 
Laatst bewerkt:
Prima, dan raad ik je (jaspertjeh) aan om naar de wordpress installatie procedure te kijken. Hier schrijven ze gegevens weg naar het config bestand (wp-config?), in ieder gevap een stuk beter dan mijn code.
 
eh, bezoekers via GET rechtstreeks naar je config bestand (of welk bestand dan ook) laten schrijven is een extreem slecht idee.

Wil je zeggen dat POST veiliger is? POST is voor de eindgebruiker niet zo 1,2,3 zichtbaar. Maar via het netwerk even onveilig.
Beste SSL of de data encrypten :).
 
Wil je zeggen dat POST veiliger is? POST is voor de eindgebruiker niet zo 1,2,3 zichtbaar. Maar via het netwerk even onveilig.
Beste SSL of de data encrypten :).
Je moet sowieso zorgen dat je de data valideert voor je hem opslaat (als je hem tijdens de overdracht kunt versleutelen, des te beter). Maar, als je via GET opgegeven informatie opslaat wordt het voor derden mogelijk om legitieme gebruikers voor hun karretje te spannen. Stel dat je gebruikers via GET orders laat plaatsen. Je zou een ingelogde gebruiker dan, zonder zijn medeweten, een order kunnen laten plaatsen door hem simpelweg een <img> element met het GET request in de src te laten laden.
 
Zoiets kan het beste met fopen en fwrite. Hier schrijf ik bijvoorbeeld een error weg:
PHP:
<?php
if (!$connect OR $connect == false) {
$fopen = fopen("../error.txt", "w"); //Bestand openen en write rechten geven
fwrite ($fopen, "Error: Database verbinding geweigerd<br>") ; //Tekst wegschrijven
fclose($fopen); //Sluiten
$error = true; // Var errorop true zetten.
}

if (!$dbsellect OR $dbsellect == false) {
$fopen = fopen("../error.txt", "w"); //Bestand openen en write rechten geven
fwrite ($fopen, "Error: Database niet gevonden<br>") ;//Tekst wegschrijven
fclose($fopen); //sluiten
$error = true; // Var errorop true zetten.
}

if ($error == true) {
echo "<h3>De CMS draait nu in safe-mode. Het is niet aangeraden om verder te gaan!";
$fopen = fopen("error.txt", "w");
fwrite ($fopen, "Let op: Mensen hebben de safe-mode berijkt! Zorg voor een oplossing als je deze foutcode vaker ziet<br>") ;
fclose($fopen);
$error = true;
?>
 
Pfoe! Op een of andere manier heb ik geen notificatie gekregen van deze berichten hier. :eek: Aan deze informatie heb ik echt heel veel. Dank hiervoor. :D Ik ga er in de loop van de week mee aan de slag. Jullie horen van me.

Gr,
Jasper
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan