game maker
Gebruikersnaam:
Wachtwoord:
Home Info Forums Help
Welkom, Gast. Alsjeblieft inloggen of registreren.
De activerings e-mail gemist?
+  Forums
|-+  Werken met Game Maker
| |-+  Beginners (Moderators: Erik Leppen, ericlegomeer, BlueMoonProductions)
| | |-+  httpdll2 webhost naar game
Pagina's: [1]
« vorige volgende »
Print
Advertenties

yellyfish
Gebruiker

Offline Offline

Berichten: 140


« Gepost op: 12 Juli 2013, 12:30:23 »

Ik probeer met httpdll2 een inlogsysteem voor elkaar te krijgen. Ik ben nu zover dat het registreren werkt alleen lukt het mij niet om in de game te zien of de gebruikersnaam al bestaat.
Als de gebruikersnaam al bestaat wordt hij niet geregistreerd omdat dit in mijn php codes staan.

Mijn vraag is dus hoe kan ik met gamemaker gegevens ophalen van een site/datbase?

Tot nu toe heb ik in gamemaker:

Create:
GML:
http_dll_init();
//Check if they want to login or register a new account
q=show_message_ext("Register an account, or Login?","Register","Login","");

//if they want to login
if (q==2){
//Get the user name and password
username=get_string("Please enter your username:","");
password=get_string("Please enter your password:","");

}


//if they want to register.
if (q==1){
//Get the user name and password
username=get_string("Please enter your username (To register):","");
password=get_string("Please enter your password (To register):","");

RQ_register=httprequest_create();
httprequest_set_post_parameter(RQ_register, "username", username);
httprequest_set_post_parameter(RQ_register, "password", password);
httprequest_connect(RQ_register, "http://XX.XX/register.php/", true);
httprequest_update(RQ_register);
}

step:
GML:
if httprequest_get_state(RQ_register) !=4
{
httprequest_update(RQ_register);
}
else
{
httprequest_destroy(RQ_register);
}

php register.php:
Code:
<html>
<title>
</title>
<body>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$username $_POST['username'];
$password $_POST['password'];
$con mysql_connect("XX","XX","XX") or die(mysql_error());
mysql_select_db("XX",$con) or die(mysql_error());
if (!(
mysql_fetch_array(mysql_query("SELECT * FROM users WHERE username='$username'"))))
{
$query mysql_query("INSERT INTO users(username,password) VALUES ('$username','$password')") or die(mysql_error());
print 
"Gefeliciteerd! U bent succesvol geregistreerd. U kunt <a href='login.php'>hier</a> inloggen";
}
else
{
print 
"Username is al in gebruik.";
header('1');
}
}
else
{
print 
"You can register here";
header('2');
}
?>

<form action="register.php" method="POST">
Please enter a username: <input type="text" name="username"> </input><br>
Please enter a password: <input type="text" name="password"> </input><br>
<input type="submit">
</form>
</body>
</html>

Ik heb op de site ook een inlogsysteem vandaar dat ik tekst print.


Voor de duidelijkheid, communiceren van gamemaker naar de site werkt dus want ik kan registreren!


Bedankt!

Naar boven Gelogd

3D Maker
Gebruiker


Offline Offline

Berichten: 468

http://joostverbraeken.com


WWW
« Antwoord #1 Gepost op: 12 Juli 2013, 21:58:06 »

het lijkt mij een hele specialistische vraag, behoorlijk 'specifieke' kennis is nodig om hem te beantwoorden. even geen tijd er uitgebreid naar te kijken, maar je krijgt waarschijnlijk de beste antwoorden als je hem verplaatst naar het gevorderden board  Cool


Jij ziet de dingen en zegt: Waarom? Ik droom de dingen en zeg: Waarom niet?
http://www.joostverbraeken.com/
Naar boven Gelogd

yellyfish
Gebruiker

Offline Offline

Berichten: 140


« Antwoord #2 Gepost op: 12 Juli 2013, 22:43:19 »

het lijkt mij een hele specialistische vraag, behoorlijk 'specifieke' kennis is nodig om hem te beantwoorden. even geen tijd er uitgebreid naar te kijken, maar je krijgt waarschijnlijk de beste antwoorden als je hem verplaatst naar het gevorderden board  Cool
Ik heb het opgelost met
GML:
result=httprequest_get_message_body(http_request);

toch bedankt!
Met het inloggen maakt het niet heel veel uit dat het spel freezed maar als tijdens het spelen er dingen moeten worden opgeslagen in de database is het wel vervelend.

Naar boven Gelogd

The Thriforce
Gebruiker


Offline Offline

Berichten: 2490


WWW
« Antwoord #3 Gepost op: 12 Juli 2013, 22:57:34 »

Je kunt het echt niet maken om passwords in cleartext op te slaan, probeer ze tenminste te hashen met een salt, en het liefst ook nog een personal salt erbij.

Naar boven Gelogd

yellyfish
Gebruiker

Offline Offline

Berichten: 140


« Antwoord #4 Gepost op: 12 Juli 2013, 22:59:57 »

Je kunt het echt niet maken om passwords in cleartext op te slaan, probeer ze tenminste te hashen met een salt, en het liefst ook nog een personal salt erbij.
Wat bedoel je?
Ik verwerk gewoon de verwerp.php(of hoe die ook heet) en dan lees ik de body en daar haal ik uit of de gebruiker succesvol is geregistreerd. Ik kan zo uit de body bijvoorbeeld ook dingen lezen. Ik weet niet of dit de ideaalste oplossing is maar ik weet niet hoe het anders te doen.

Naar boven Gelogd

The Thriforce
Gebruiker


Offline Offline

Berichten: 2490


WWW
« Antwoord #5 Gepost op: 12 Juli 2013, 23:06:57 »

Je slaat passwords nu gewoon als droge tekst op in je database, dat is beveilingsfout nummer 1. Als het nu ooit voor zou komen dat je database lekt door een fout zijn al je gebruikers mooi de lul en kan de hacker zo hun password uitlezen.

Je kunt het best ipv je huidige password kolom in je database 2 kolommen toevoegen genaamd password_hash en personal_salt, deze stel je beide in op CHAR(128). Dan doe je in je php zoiets:

Code:
<html>
<title>
</title>
<body>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$username $_POST['username'];
$password $_POST['password'];
$con mysql_connect("XX","XX","XX") or die(mysql_error());
mysql_select_db("XX",$con) or die(mysql_error());
if (!(
mysql_fetch_array(mysql_query("SELECT * FROM users WHERE username='$username'"))))
{
$salt hash("sha512"rand());
$hash hash("sha512"$username $password "customsalt1381987340" $salt);
$query mysql_query("INSERT INTO users(username,password_hash,personal_salt) VALUES ('$username','$hash','$salt')") or die(mysql_error());
print 
"Gefeliciteerd! U bent succesvol geregistreerd. U kunt <a href='login.php'>hier</a> inloggen";
}
else
{
print 
"Username is al in gebruik.";
header('1');
}
}
else
{
print 
"You can register here";
header('2');
}
?>

<form action="register.php" method="POST">
Please enter a username: <input type="text" name="username"> </input><br>
Please enter a password: <input type="text" name="password"> </input><br>
<input type="submit">
</form>
</body>

Als je nu inlogt moet je gewoon $hash op dezelfde manier opnieuw berekenen en deze vergelijken met de password_hash in de database (je moet nu $salt gewoon uit de database halen en dus niet meer random genereren.)

Op deze manier kunnen hackers niet zomaar via een lek het wachtwoord achterhalen, ze zullen dan doordat je salts gebruikt geen rainbowtables* die al gegenereerd zijn kunnen gebruiken en omdat je ook personalsalts gebruikt zullen ze ook geen rainbowtable voor je gehele database kunnen maken. Ze zullen nu heel lang moeten bruteforcen per user als ze het password willen weten.

* Een rainbowtable is een tabel vol met resultaten van hashes waardoor hackers ze kunnen backtracen naar hun originele waarde.

Naar boven Gelogd

yellyfish
Gebruiker

Offline Offline

Berichten: 140


« Antwoord #6 Gepost op: 12 Juli 2013, 23:15:31 »

Ah ok maar beveiling is voor ons niet het grootste probleem.
Nu is communicatie tussen server, client en webhost belangrijk.


Naar boven Gelogd

The Thriforce
Gebruiker


Offline Offline

Berichten: 2490


WWW
« Antwoord #7 Gepost op: 12 Juli 2013, 23:18:01 »

Voor jou niet, voor je gebruikers wel. Als je geen beveiliging inbouwt ga ik in ieder geval niet registreren. En veel anderen met mij ook niet.

Naar boven Gelogd

yellyfish
Gebruiker

Offline Offline

Berichten: 140


« Antwoord #8 Gepost op: 12 Juli 2013, 23:20:17 »

Voor jou niet, voor je gebruikers wel. Als je geen beveiliging inbouwt ga ik in ieder geval niet registreren. En veel anderen met mij ook niet.
Beveiling maken we wel, nu is dit niet de prioriteit.

Er komt voorlopig ook nog geen versie 1 uit.

Naar boven Gelogd

The Thriforce
Gebruiker


Offline Offline

Berichten: 2490


WWW
« Antwoord #9 Gepost op: 12 Juli 2013, 23:21:29 »

Maar als je toch bezig bent met het registratiesysteem kun je het net zo goed meteen veilig maken, anders moet je dat later nog gaan aanpassen.

Naar boven Gelogd

bennie321
Gebruiker


Offline Offline

Berichten: 2103

En weer bezig met GML en GMS


« Antwoord #10 Gepost op: 12 Augustus 2013, 23:01:51 »

Maar als je toch bezig bent met het registratiesysteem kun je het net zo goed meteen veilig maken, anders moet je dat later nog gaan aanpassen.

Ben ik het ook 100% mee eens, nu kun je wel zeggen dat het geen prioriteit heeft, maar straks als het allemaal "werkt" dan denk je dat het wel zo kan blijven. Zowieso willen denk ik (waarom wel?) geen vertrouwelijke info gebruiken/geven als er niet eens goed met die informatie om wordt gegaan.


Gamemakerserver van Size43 (Refferal)
Coming soon: Nog een topdown game Grijns
Naar boven Gelogd

WBG
Globale moderator


Offline Offline

Berichten: 5034


« Antwoord #11 Gepost op: 13 Augustus 2013, 22:27:23 »

Beveiling maken we wel, nu is dit niet de prioriteit.

Door die instelling wordt je dus onderdeel van een botnet. Beveiliging is iets waar je mee moet beginnen en waar je altijd op moet blijven letten.

Dat iedereen het er steeds over heeft, is niet voor niks. Digitale veiligheid wordt vaak onderschat; men stelt het uit tot het te laat is, en dan is het hek van de dam.

In de code in de beginpost staan twee gigantische veiligheidslekken: Wachtwoorden worden leesbaar opgeslagen, en gebruikersinvoer wordt ongefilterd uitgevoerd.
Samen genoeg voor iemand met verstand van zaken om alle gebruikersnamen- en wachtwoorden in een bestandje te zetten en te downloaden.

Als de spelers op andere websites, zoals dit forum, dezelfde gebruikersnaam en hetzelfde wachtwoord hadden, is hun forumaccount ineens gehackt. Beveiliging dient altijd prioriteit te hebben, gebrek eraan kan verregaande implicaties hebben.


Om wat praktische tips te geven;
- Lees je in over SQL Injecties
- Vertrouw nooit wat er in $_POST of $_GET staat!
- Zorg dat niemand de wachtwoorden kan lezen (dus jij zelf ook niet)

Momenteel is je code erg onveilig. Iemand met verstand van SQL Injecties steelt binnen no-time alle wachtwoorden. Dit is geen php forum, dus ik zal niet specifiek op de code ingaan, maar je kunt de lekken dichten al je:
Code: (php)
$username = $_POST['username'];
$password = $_POST['password'];
Vervangt door:
Code: (php)
$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password'] . 'Geheime tekst');



PS, @The Thriforce: Sha1 en een custom salt is inderdaad goed, maar zout alleen voldoet niet om een website veilig te houden. Ook in de aangepaste versie in jou post kan men SQL injecties op zowel de select als insert query uitvoeren.

Naar boven Gelogd

Bjarno
Jurylid


Offline Offline

Berichten: 5083

Vragen over GM niet via PM.


WWW
« Antwoord #12 Gepost op: 14 Augustus 2013, 07:52:22 »

Voor privétestjes waar alleen jij toegang tot hebt is veiligheid niet zo belangrijk, maar als je van plan bent om het publiek te maken is het belangrijk om vanaf het begin al bezig te zijn met de veiligheid van het script.

SQL injecties is een van de eerste dingen waar je moet op letten... via een SQL injectie kan iemand je hele database leegmaken door "uit de string te treden" en er vervolgens SQL-code te typen.

Wachtwoorden in plain text opslaan is ook niet echt wenselijk, je kan inderdaad beter opslaan met een salt en een hash, maar het is beter om meerdere hash-algoritmes te combineren.

Wat ik wel merk is dat je plaintext wachtwoorden verzend en ze pas bij de server versleutelt. Wat je zou kunnen doen is een clientside hashingsysteem en een serverside hashingsysteem. Zodat het échte wachtwoord voor niemand die tussen client en server zit zichtbaar is. Nu zou iemand met WireShark (of een ander sniffingprogramma) in jouw netwerk kunnen zien dat je registreert en dat je wachtwoord gelijk is aan ---.

Iets dat niet meteen met hackers te maken heeft, maar wel voor veiligheid staat zijn sterke wachtwoorden. Een wachtwoord moet minimaal ? tekens lang zijn, anders kan iemand meteen inloggen.

Een foutje dat ik wel opgemerkt heb is dat je get_string gebruikt voor het wachtwoord op te vragen: standaard betekent dat dat iedereen die meekijkt het wachtwoord kan lezen. Je kan het eenvoudig oplossen door zelf een inlogformulier te schrijven zonder get_string, of laat de gebruiker een lettertype installeren (http://www.director-online.com/dougwiki/index.php?title=Password_Font_%28ttf%29) en zet dat lettertype als het invoerlettertype voor je get_string opvraagt.

« Laatste verandering: 14 Augustus 2013, 08:21:30 door Bjarno »

Naar boven Gelogd

Advertenties
« vorige volgende »
Pagina's: [1]
Print


Topic Informatie
0 geregistreerde leden en 1 gast bekijken dit topic.

Ga naar:  

Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines
www.game-maker.nl © 2003-2019 Nederlandse Game Maker Community