• Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011

dewa

Members
  • Content count

    81
  • Joined

  • Last visited

Community Reputation

2 Neutral

About dewa

  • Rank
    Advanced Member
  1. Hallo zusammen, ich habe relativ wenig Ahnung wenn es um die Sicherheit von Datenbank zugriffen geht. Ich habe mir folgendes gedacht. Ich erstelle ein Hash was sich aus Username,Passwort,Salt, und einem Timestamp von der Datenbank zusammensetzt. Also bevor man Scripte aufruft, die wichtige Funktionen haben wird erst mal der Timestamp geholt von dem letzden Datenbank zugriff. C# public init_regist init_regist; public hash_test hash_test; public void OnTriggerEnter(Collider Other) { StartCoroutine(server_ts(init_regist.Username,init_regist.Passwort)); } public IEnumerator server_ts( string Username,string Passwort) { WWWForm form = new WWWForm(); form.AddField("username", Username); form.AddField("passwort", Passwort); WWW webRequest = new WWW("http://hostin(.................).net/last_login.php", form); yield return webRequest; if (webRequest.text != null) { hash_test.last_login_ts = (int.Parse(webRequest.text)); hash_test.createhashtest (); } else { Debug.Log(webRequest.text); } } php: <?php $servername = "hahah"; $un = "hihihi"; $pw = "hohoho"; $dbname = "hehehe"; $eingelogt =false; $username = $_POST["username"]; $passwort = $_POST["passwort"]; $last_login_server= 0; $conn = new mysqli($servername, $un, $pw, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $param = $username; $stmt = $conn->prepare("SELECT passwort FROM i(...)t WHERE username LIKE ?"); $stmt->bind_param("s", $param); $stmt->execute(); $stmt->bind_result($passwort2); while ($stmt->fetch()) { if($passwort2==$passwort) { $eingelogt = true; }else{ echo "error"; $stmt->close(); $conn->close(); } } $param = $username; $stmt = $conn->prepare("SELECT last_login FROM i(...)t WHERE username LIKE ?"); $stmt->bind_param("s", $param); $stmt->execute(); $stmt->bind_result($last_login_server); while ($stmt->fetch()) { echo ($last_login_server); } $conn->close(); ?> Nachdem das C# Script den Timestamp hat wird der Hash in Unity generiert. Und zum Server geschickt. public init_regist init_regist; public hash_helper hash_helper; public trigger_ts trigger_ts; public static int last_login_ts; static string salt = "|husdhuisdh"; public void createhashtest() { string securehash = init_regist.Username+init_regist.Passwort+salt+last_login_ts ; string hash = hash_helper.Md5Sum (securehash); Debug.Log (hash); StartCoroutine(sichere_con(init_regist.Username, init_regist.Passwort, hash)); } public IEnumerator sichere_con( string Username, string Passwort, string hash) { WWWForm form = new WWWForm(); form.AddField("username", Username); form.AddField("passwort", Passwort); form.AddField("hash", hash); WWW webRequest = new WWW("http://hos(.......)h_test.php", form); yield return webRequest; if (webRequest.text != null) { Debug.Log("securehash php :" +webRequest.text); } else { Debug.Log(webRequest.text); } } zum Php Script: <?php $servername = "........"; $un = "....."; $pw = "......."; $dbname = "......"; $eingelogt =false; $username = $_POST["username"]; $passwort = $_POST["passwort"]; $csharphash= $_POST["hash"]; $salt= "|husdhuisdh"; $last_login_server= 0; $last_login_server_neu= time(); $belastung=0; $securehash= "test"; $conn = new mysqli($servername, $un, $pw, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $param = $username; $stmt = $conn->prepare("SELECT passwort FROM i(.....)t WHERE username LIKE ?"); $stmt->bind_param("s", $param); $stmt->execute(); $stmt->bind_result($passwort2); while ($stmt->fetch()) { if($passwort2==$passwort) { $eingelogt = true; }else{ echo "falsches PW"; $stmt->close(); $conn->close(); } } $param = $username; $stmt = $conn->prepare("SELECT last_login FROM i(....)t WHERE username LIKE ?"); $stmt->bind_param("s", $param); $stmt->execute(); $stmt->bind_result($last_login_server); while ($stmt->fetch()) { $securehash = $_POST["username"].$_POST["passwort"].$salt.$last_login_server; if (md5($securehash) === ($csharphash) ) { //DO STUFF! echo "ES KLAPPT"; }else{ $stmt->close(); $conn->close(); } } $stmt = $conn->prepare("UPDATE i(....)t SET last_login=? WHERE username = ?"); $stmt->bind_param('ss', $last_login_server_neu, $username); $stmt->execute(); $conn->close(); ?> Und zuletzt noch die Hash helper Class womit der Hah erzeugt wird. public string Md5Sum(string strToEncrypt) { System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding(); byte[] bytes = ue.GetBytes(strToEncrypt); // encrypt bytes System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] hashBytes = md5.ComputeHash(bytes); // Convert the encrypted bytes back to a string (base 16) string hashString = ""; for (int i = 0; i < hashBytes.Length; i++) { hashString += System.Convert.ToString(hashBytes[i], 16).PadLeft(2, '0'); } return hashString.PadLeft(32, '0'); } Ich merke grade das es sehr viel Code ist, sorry aber wollte lieber mal den kompletten ablauf posten. Ist das mit dem Hash + Timestamp so in Ordnung? Reicht das als Sicherheit aus??
  2. Okay, da hast du recht, ich habe jetzt den klassischen weg implementiert, ging leichter als gedacht
  3. Hallo zusammen, ich hoffe ich schreibe im richtigen Thread. Also in meiner App kann man sich Registrieren. Ich habe es so eingerichtet das man als unique key den DeviceUniqueIdentifier nimmt und vorher überprüft wird ob sich schon jemand mit diesem Unique registriert hat und somit verhindere das sich einzelne Leute oder bots tausend mal anmelden. Nur wenn man sein Passwort vergisst ist man halt aufgeschmissen weil man nicht seine E-mail angeben muss wo dieses dann hingeschickt worden ist. Was haltet ihr von dieser Art Registrierung? Kann man das so lassen oder sollte ich doch lieber den klassischen Weg nehmen und die Registrierung mit E-Mail Zertifizierung implementieren? Oder einerfach die Registrierung mit dem DeviceUniqueIdentifier mit zusätzlicher angabe einer E-Mail Adresse?? Vielen Dank
  4. jap, war die Zeile 94. Bin nur nicht auf die Idee gekommen das es daran liegen könnte weil normalerweise eine andere Fehlermeldung kommt wenn man die Adresse Falsch eingibt
  5. Ich habe den Fehler gefunden... Unfassbar das ich 14 Stunden gebraucht habe den Fehler zu finden. WWW webRequest = new WWW("http://hosting3381.af923.netcup.net/Freunde_daten_vorschau.php ", form); Es lag nur an der WWW Adresse das hinten an den Anführungszeichen ein Lehrzeichen war. Habe das Script damals mit Visual Studio geschrieben und dort gab es keine Probleme, aber Mono Develop kommt damit wohl irgendwie nicht zurecht, anders kann ich es mir nicht erklären
  6. Hallo zusammen, bin bei folgenden Error total überfragt. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache Server at default Port 80</address> </body></html> UnityEngine.Debug:Log(Object) <Freunde_exp>c__Iterator1:MoveNext() (at Assets/Scene/Scripts/Freunde/teeeest.cs:94) UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr) Kann mir irgendjemand sagen was das zu bedeuten hat? Mein php File hat einwandfrei funktioniert, ich habe nix dran verändert und plötzlich bekomme ich diesen Fehler. Wenn ich mein PHP Script via Browser öffne bekomme ich auch was anderes angezeigt. Es muss also an Unity liegen
  7. Ahhhh, alles klar. jetzt weiß ich Bescheid, vielen vielen Dank 😊
  8. Das Problem ist ja das ich es nicht zur verfügung habe. Zum verständniss habe ich mal ein Bild Angehangen. Es geht halt um eine Freundschaftslist, und alle "Panels" die ich markiert habe sind einfach nur Buttons. Wenn der Spieler auf einen Freund klickt erscheint ein Panel mit weitere Informationen, zum Beispiel nochmal der Name. Also wenn ich auf Freund "Alex" klicke muss der Name Alex im neuen Panel erscheinen. Ich kann ja nicht einfach irgendein Button Deklarieren, weil es ja noch nicht feststeht welcher Freund angeklickt wird.
  9. Hallo zusammen, ich bin grad mal wieder am Verzweifeln... Ich habe viele Buttons wo Informationen drinnen stehen(Text). Diese Buttons generieren sich in Runtime und werden unterschiedlich generiert(Abhängig von dem Spieler). Nun möchte ich aber im Script auf den Text zugreifen. Das Problem ist das ich die jeweiligen Texte nicht vorher zuordnen kann, da diese ja noch nicht existieren. Schon mal Danke
  10. Mit der Notlösung funktioniert es. Vielen Dank
  11. Okay danke, habe jetzt soweit alles Implementiert. Bekomme aber leider noch einen Fehler public void freund_speichern() { if (wieviele_freunde_int < 11) { string freund = Freund_name.text; freunde[wieviele_freunde_int] = freund; PlayerPrefsX.SetStringArray("freunde", freunde); wieviele_freunde_int = wieviele_freunde_int + 1; } else { Debug.Log("zu viele freunde"); } } Fehler: Can't save null entries in the string array when setting freunde.
  12. Etwa das Extrem lange Script?
  13. Aber die Scripte dort sind in Java Script, oder Täusche ich mich da grade?
  14. Hallo zusammen, ich bin grade auf folgendes Problem gestoßen. Ich versuche meine Freundschaftsliste unter den Playerprefs zu speichern. Am besten wäre es natürlich wenn ich alle Freunde unter "Freunde" in den Playerprefs abspeichern könnte sodas ich alle freunde auf einmal laden könnte. Nur ich kriege das irgendwie nicht hin gibt es irgendeine Funktion wodurch es machtbar ist?
  15. Danke für eure Antworten. Ich habe es mal mit dem bubble sort versucht. Ich stoß aber immer auf ein problem. Egal wie oft ich die For Schleife auch durchlaufen lasse Sie ordnet immer nur einen durchgang. Selbst wenn ich statt X 1000 Eingebe werden Alle Gameobjekte nur 1 Durchgang geordnet EDIT: Habe eine lösung gefunden. Ich setze einfach sortieren(); in mein if Statement sodas er solange durchlaufen muss bis er nix mehr zum ändern hat public void sortieren() { //Wieviel Childs im Gameobjekt int childs = Scorepanel.transform.childCount; int welches_child=0; int x=0; for (int i = 0; i < childs +x; i++) { //Damit kein Child ausgewählt wird welches nicht existiert if(welches_child+1==childs) { welches_child = 1; } Transform child_1 = Scorepanel.gameObject.transform.GetChild(welches_child); Transform child_2 = Scorepanel.gameObject.transform.GetChild(welches_child + 1); Transform ThisEXP_1 = child_1.Find("EXP"); Transform ThisEXP_2 = child_2.Find("EXP"); Text EXP_1 = ThisEXP_1.GetComponent<Text>(); Text EXP_2 = ThisEXP_2.GetComponent<Text>(); int.TryParse(EXP_1.text, out oberes_child_int); int.TryParse(EXP_2.text, out unteres_child_int); //beim nächsten durchgang das nächste Child auswählen welches_child++; //Wenn EXP vom oberen Child höher sind Ihn dann runtersetzen if (oberes_child_int > unteres_child_int) { x++; child_1.SetSiblingIndex(i+1); } } }