Ist es möglich, eine .htaccess Datei zu öffnen und alle Spalten in PHP auskommentieren?PHP - Datei öffnen und alle Spalten auskommentieren - htaccess
Ich benutze die IMAP-Funktionalitäten von PHP und speichern die E-Mail-Anhänge auf dem Server. Wenn ein Benutzer eine E-Mail mit einer .htaccess-Datei zu Hackerzwecken sendet, werde ich jede Zeile in der .htaccess-Datei auskommentieren, bevor sie auf dem Server gespeichert wird.
if ($emails[$i]['attachments'][$n]['name'] == '.htaccess') {
/* Uncomment all the lines with # */
}
Meine aktuellen .htaccess-Datei wie folgt aussieht:
Order allow, deny
Deny from all
RemoveHandler .cgi .php .php3 .php4 .php5 .phtml .pl .py .pyc .pyo
RemoveType .cgi .php .php3 .php4 .php5 .phtml .pl .py .pyc .pyo
php_flag engine off
So kann ein Benutzer nicht direkt auf die Dateien zugreifen, sondern um den Inhalt zu einem benutzerspezifischen Unterordner hochgeladen, so dass es für sie möglich ist, Lade einen .htaccess hoch, der die definierten Regeln überschreibt.
Ich lasse die Benutzer die Anhänge nicht direkt herunterladen. Sie sehen einen Link, der erzeugt wird, wie folgt:
$msgfile = '../php/downloads/msgAttachmentDownload.php?download=' . urlencode(base64_encode($r16['id']));
$fileLink = '<a target="_blank" href =" ' . $msgfile . '"><i class="fa fa-download fa-fw"></i> ' .$r16['filename']. ' (' . $msgfilesize . ' MB)</a>';
Im msgAttachmentDownload.php packe ich die URL aus der Datenbank und laden Sie es:
$file = '../..' . $r2['fileurl'] . $r2['filename'];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
So sind die Benutzer nie den wirklichen Weg sehen zu die Datei auf dem Server, wenn ich richtig liege.
Wäre großartig, Ihre Vorschläge zu hören, und ich hoffe, dass diese Frage und die Lösung ein guter Rat für andere Menschen sein wird.
Müssen Sie * * die Anlagen unter der Docroot speichern? Es könnte besser sein, sie draußen zu speichern und stattdessen eine Art von Ressourcenverwaltungsskript für den Zugriff zu verwenden? – CD001
Ich stimme mit CD001 überein, dies scheint besser gelöst zu sein, wenn ich einen Dateispeicher an einer anderen Stelle auf der Festplatte habe, als ihn direkt in Docroot zu speichern. – cardonator
Es ist eine schlechte Idee, alle E-Mail-Anhänge zu übernehmen und sie direkt öffentlich zugänglich zu machen. Du setzt dich allen möglichen Sicherheitsproblemen aus. –