PHP FTP Server hinter NAT

Problem: Server welche sich hinter einem NAT befinden, sind mit der eigenen IP-Adresse nach außen nicht erreichbar. Entsprechend können über die Server-IP keine FTP-Operationen ausgeführt werden. Die Lösung liegt darin, über die öffentliche Serveradresse zu kommunizieren. Das heißt, dem PHP zu sagen, dass es nicht die Adresse nutzen soll welche der Server versucht zu vermitteln, sondern die mit der sich ursprünglich verbunden wurde. Das erreicht man über folgende FTP-Option:

ftp_set_option($this->connection, FTP_USEPASVADDRESS, false);

Danach setzt man noch den Passiven Modus

ftp_pasv($this->connection, true);

fertig!

Quellen:

https://serverfault.com/questions/797928/php-ftp-passive-ftp-server-behind-nat

http://www.elitehosts.com/blog/php-ftp-passive-ftp-server-behind-nat-nightmare/

SD-Karte volle Kapazität wiederherstellen

sudo diskutil eraseDisk FAT32 MYSD MBRFormat /dev/disk2

How to reclaim full capacity on flash memory card or USB … | My Cyber Universe

How to reclaim full capacity on flash memory card or USB … | My Cyber Universe

Have you ever met this problem that the flash memory card or USB flash drive is not showing the full capaci…

Source: mycyberuniverse.com/how-reclaim-full-capacity-flash-memory-card-usb-flash-drive.html

Arduino über HC08 Modul verbinden

Um auch auf dem iPhone mit dem Arduino per Bluetooth kommunizieren zu können benötigt man ein zusätzliches BLE-Modul. Dafür habe ich das SH-HC-08 Modul angebunden. Zu beachten ist, dass man die Pins 10 und 11 als RX und TX für die Kommunikation verwendet. Der Pin10 ermöglicht eine Software-Serial-Verbindung. Damit kann sowohl die serielle Schnittstelle als auch die BLE-Schnittstelle angesprochen werden. 

Arduino HC-08 Bluetooth Modul

Arduino HC-08 Bluetooth Modul

In diesem Artikel zeigen wir, wie das HC-08 Bluetooth Modul mit dem Arduino verbunden wird und wie über eine App die On-Board LED gesteuert wird

Source: www.aeq-web.com/arduino-hc08-bluetooth-module-ios-serial-controller/

 

CSRF (Cross Site Request Forgery) verhindern

  1. Token generieren
  2. session_start();
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
  3. Token in den Meta-Tag generieren
  4. Token mit jQuery schicken
  5. $.ajaxSetup({
        headers : {
            'CsrfToken': $('meta[name="csrf-token"]').attr('content')
        }
    });
  6. Serverseitige Überprüfung
  7. session_start();
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    
    header('Content-Type: application/json');
    
    $headers = apache_request_headers();
    if (isset($headers['CsrfToken'])) {
        if ($headers['CsrfToken'] !== $_SESSION['csrf_token']) {
            exit(json_encode(['error' => 'Wrong CSRF token.']));
        }
    } else {
        exit(json_encode(['error' => 'No CSRF token.']));
    }

    Quelle: Stackoverflow

SQL – Dump per PHP erstellen

/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$folder,$tables = '*')
{
    $return = '';
    $link = mysql_connect($host,$user,$pass);
    mysql_select_db($name,$link);
    
    //get all of the tables
    if($tables == '*')
    {
        $tables = array();
        $result = mysql_query('SHOW TABLES');
        while($row = mysql_fetch_row($result))
        {
            $tables[] = $row[0];
        }
    }
    else
    {
        $tables = is_array($tables) ? $tables : explode(',',$tables);
    }
    
    //cycle through
    foreach($tables as $table)
    {
        $result = mysql_query('SELECT * FROM '.$table);
        $num_fields = mysql_num_fields($result);
        
        $return.= 'DROP TABLE '.$table.';';
        $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
        $return.= "\n\n".$row2[1].";\n\n";
        
        for ($i = 0; $i < $num_fields; $i++) 
        {
            while($row = mysql_fetch_row($result))
            {
                $return.= 'INSERT INTO '.$table.' VALUES(';
                for($j=0; $j<$num_fields; $j++) 
                {
                    if($row[$j] !== NULL){
                        $row[$j] = addslashes($row[$j]);
                        $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                        if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                    }else{
                        $return .= "NULL";
                    }
                    if ($j<($num_fields-1)) { $return.= ','; }
                }
                $return.= ");\n";
            }
        }
        $return.="\n\n\n";
    }
    
    //save file
    $handle = fopen($folder . '/'.date('Y-m-d-H-i-s').'-db-backup-' . time() . '.sql','w+');
    fwrite($handle,$return);
    fclose($handle);
}