Mai 14

In diesem Beispiel wird erklärt wie man ein Token generiert und dies als Form Post Schutz verwendet.

1. Füge den folgenden Code in jede Form ein

  1. <input type="hidden" name="token" value="’.$_SESSION['token'].’" />

2. Der folgende Code muss in jeder Datei die geschützt werden soll enthalten sein. Im besten Fall fügt man den Code in eine Config.

  1. <?
  2. define("TOKEN_PROTECTED", true);
  3. if(isset($_SESSION["userid"])) {
  4.     // your function to check if a user is logged in
  5.     if (empty($_SESSION[‘token’]) || !isset($_SESSION[‘token’])) {
  6.         // if there is no token set
  7.         $_SESSION[‘token’] = strrev(md5($_SESSION[‘password’]));
  8.         //set a token with a reverse string and md5 encryption of the user’s password
  9.     }
  10.     if (TOKEN_PROTECTED != false) {
  11.         // if you did not define CSRF_PROTECTED as false
  12.         if ($_POST) {
  13.             // if there is a form present
  14.             if ($_POST[‘token’] != $_SESSION[‘token’]) {
  15.             // if the input token does not equal the session token
  16.                 header("Location: /index.php");
  17.                 // redirect to index
  18.                 die(); // stops all $_POST data from being sent
  19.             }
  20.         }
  21.     }
  22. }
  23. ?>
Mai 14

Als erstes Braucht man eine Tabelle.

  1. CREATE TABLE `banned_ip` (
  2. `id` INT( 25 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `ip` VARCHAR( 25 ) NOT NULL ,
  4. `reason` TEXT NOT NULL
  5. )

login.php

  1. $con = mysql_connect("localhost", "test", "test");
  2.  
  3. if(!$con) { die("Can not connect to database: ".mysql_error()); }
  4.  
  5. $db = mysql_select_db("test", $con);
  6.  
  7. if(!$db){ die("Can not select database: ".mysql_error()); }

admin.php

  1. <?php
  2. include("connect.php");
  3.  
  4. function ban(){
  5.         echo "<form action=’?act=ban’ method=’post’>" .
  6.              "<table width=’500′ border=’1′>" .
  7.                  "<tr>".
  8.              "<td><center><font size=’+2′>Ban!</font></center></td>".
  9.              "</tr>".
  10.              "<tr>".
  11.              "<td>IP:<br> <input type=’text’ name=’ip’ size=’30′ />
  12. ".
  13.              "Reason:
  14. ".
  15.              "<textarea rows=’10′ cols=’55′ name=’reason’></textarea><br>".
  16.              "<input type=’submit’ value=’Ban!’>".
  17.              "</td>".
  18.              "</tr>".
  19.              "</table>".
  20.                  "<br><br>";
  21.  
  22.         $result = mysql_query("SELECT * FROM banned_ip");
  23.         $rows = mysql_num_rows($result);
  24.        
  25.         if($rows > 0){
  26.  
  27.                 //Display banned IPs
  28.                 echo "<table width=’700′ border=’1′>" .
  29.                     "<tr>" .
  30.                     "<td><center><font size=’+2′>Banned IPs</font></center></td>" .
  31.                     "</tr><tr><td>" .
  32.                     "<table border=’1′ width=’100%’>" .
  33.                     "<tr><td width=’25%’><b>Id</b></td><td width=’25%’><b>Ip</b></td><td width=’25%’><b>Reason</b></td><td width=’25%’><b>Action</b></td>" .
  34.                     "</tr>";
  35.  
  36.                 while($row = mysql_fetch_array($result)){
  37.                         echo "<tr><td width=’25%’>".$row[‘id’]."</td><td width=’25%’>".$row[‘ip’]."</td><td width=’25%’>".$row[‘reason’]."</td><td width=’25%’><a href=’?act=del&id=".$row[‘id’]."’>Delete</a></td></tr>";
  38.                 }
  39.  
  40.                 echo "</table></td></tr></table>";
  41.         }
  42. }
  43.  
  44. //This function will ban a IP
  45. function ban_ip(){
  46.  
  47.         $ip = $_REQUEST[‘ip’];
  48.         $reason = $_REQUEST[‘reason’];
  49.  
  50.         //If there are errors display them in here
  51.         if(empty($ip)){ die("Please insert a IP!"); }
  52.  
  53.         if(empty($reason)){ die("Please insert a reason!"); }
  54.  
  55.         //Let’s insert this ip and reason into your database
  56.  
  57.         $insert = mysql_query("INSERT INTO banned_ip (ip, reason) VALUES (‘$ip’, ‘$reason’)");
  58.  
  59.         //If there was problems with inserting those things into database, lets display the error
  60.         if(!$insert){ die(mysql_error()); }
  61.  
  62.         echo "<table width=’500′ border=’1′>"
  63.             ."<tr>"
  64.             ."<td><center>Info</center></td>"
  65.             ."</tr>"
  66.             ."<tr>"
  67.             ."<td><br>IP: <b>$ip</b> was banned, Reason: <b>$reason</b><br><a href=’admin.php’>Back</a><br></td>"
  68.             ."</tr>"
  69.             ."</table>";
  70. }
  71.  
  72.  
  73. function del() {
  74.  
  75.         $id = $_GET[‘id’];
  76.  
  77.         $del = mysql_query("DELETE FROM banned_ip WHERE id=’$id’");
  78.  
  79.  
  80.         if(!$del){ die(mysql_error()); }
  81.  
  82.         echo "<table width=’500′ border=’1′>"
  83.             ."<tr>"
  84.             ."<td><center>Info</center></td>"
  85.             ."</tr>"
  86.             ."<tr>"
  87.             ."<td><br>Ban deleted, <a href=’admin.php’>Go back</a><br></td>"
  88.             ."</tr>"
  89.             ."</table>";
  90.  
  91. }
  92.  
  93. switch($act){
  94.         default;
  95.                 ban();
  96.                 break;
  97.  
  98.         case "ban";
  99.                 ban_ip();
  100.                 break;
  101.  
  102.         case "del";
  103.                 del();
  104.                 break;^
  105. }
  106. ?>

bans.php

  1. <?php
  2. include("connect.php");
  3. $ip = $_SERVER[‘REMOTE_ADDR’];
  4. $find_ip = mysql_query("SELECT * FROM banned_ip WHERE ip=’$ip’");
  5. $ban = mysql_fetch_array($find_ip);
  6. if($ip == $ban[‘ip’]){ die("You are banned from this site!");}
  7. ?>

Den folgenden Code in die Datei z.B. index.php einfügen und du bist gesichert.

  1. <?php
  2. include("bans.php");
  3. ?>
Mai 14

PHP Data Objects oder kurz PDOs stellt eine Datenbankabstraktionsebene dar und ermöglicht einen einheitlichen Zugriff von PHP auf unterschiedliche SQL-Datenbanken, wie zum Beispiel MySQL, PostgreSQL oder SQLite. Dabei wird etwa der Portierungsaufwand beim Umstieg auf eine andere Datenbank minimiert.

PHP Data Objects existieren seit PHP 5.1, bzw davor als PECL Modul.

Beispiel 1. Fetching rows using different fetch styles

  1.  
  2. <?php
  3. $sth = $dbh->prepare("SELECT name, colour FROM fruit");
  4. $sth->execute();
  5.  
  6. /* Exercise PDOStatement::fetch styles */
  7. print("PDO::FETCH_ASSOC: ");
  8. print("Return next row as an array indexed by column name\n");
  9. $result = $sth->fetch(PDO::FETCH_ASSOC);
  10. print_r($result);
  11. print("\n");
  12.  
  13. print("PDO::FETCH_BOTH: ");
  14. print("Return next row as an array indexed by both column name and number\n");
  15. $result = $sth->fetch(PDO::FETCH_BOTH);
  16. print_r($result);
  17. print("\n");
  18.  
  19. print("PDO::FETCH_LAZY: ");
  20. print("Return next row as an anonymous object with column names as properties\n");
  21. $result = $sth->fetch(PDO::FETCH_LAZY);
  22. print_r($result);
  23. print("\n");
  24.  
  25. print("PDO::FETCH_OBJ: ");
  26. print("Return next row as an anonymous object with column names as properties\n");
  27. $result = $sth->fetch(PDO::FETCH_OBJ);
  28. print $result->NAME;
  29. print("\n");
  30. ?>
  31.  
Mai 09

Wer schonmal ein Kontaktformular in PHP erstellt hat kennt das Problem, dass die meisten User das E-Mail Feld entweder leer lassen oder falsch ausfüllen.

Um dies zu vermeiden sollte man mit Regular-Expressions arbeiten um die Gültigkeit der E-Mail Adresse zu überprüfen.

  1. <?PHP
  2. .
  3. .
  4. .
  5. public function EmailValidating($emailAdress) {
  6.     if(!empty($emailAdress) && preg_match("/^[\w.+-]{2,64}\@[\w.-]{2,255}\.[a-z]{2,6}$/", trim($emailAdress))) {
  7.         /**
  8.         SEND CONTACT FORM
  9.         */
  10.     else {
  11.         return "Email ist ungültig";
  12.     }
  13. .
  14. .
  15. .
  16. ?>

Die Funktion prüft ob die Eingabe leer ist und ob die E-Mail Adresse keine Sonderzeichen ausser . + und – hat, die Anzahl der Zeichen zwischen 2 und 64 liegen, ob ein @-Zeichen vorhanden ist, und ob eine Top-level domain (TLD) zwischen 2 – 6 Zeichen hat wobei alle Buchstaben zwischen a – z erlaubt sind.