Compare commits

...

2 Commits

Author SHA1 Message Date
25bac47c3e Improve descript of project 2023-08-18 13:21:21 -04:00
7b4b4306a6 Switch makePathSafe to use native realpath() 2023-08-18 13:19:41 -04:00
4 changed files with 10 additions and 31 deletions

View File

@ -1,6 +1,6 @@
# Comics Viewer
This small project provides a web based viewer for comics in the CBZ and CBR formats.
This small project provides a web based viewer for comics in the CBZ and CBR formats. Bear in mind that much of the code in this project is **very** old and has had lots of "just get it working" updates over the decades (not kidding) to keep up with changing PHP API requirements. It is *sooooo* not pretty (but should be *safe*).
## This project requires

View File

@ -5,16 +5,18 @@ require '../header.php';
require_login();
if ( isset($_REQUEST['comic']) ) {
$comic = makePathSafe(base64_decode(urldecode(($_REQUEST['comic']))));
$comicfull = COMICSDIR . $comic;
$comicfull = realpath(COMICSDIR . base64_decode(urldecode($_REQUEST['comic'])));
if ( $comicfull === false ) exit();
if ( substr($comicfull, 0, strlen(COMICSDIR)) != COMICSDIR ) exit();
$comic = substr($comicfull, strlen(COMICSDIR));
$comicoutputurl = "comics" . str_replace("#", "", $comic) . "/";
$comicoutputfull = "../" . EXTRACTSDIR . str_replace("#", "", $comic) . "/";
} else {
exit();
}
$ext = strtolower(substr($comic, -3));
$_SESSION['comfile'] = basename($comic);
$ext = strtolower(substr($comicfull, -3));
$_SESSION['comfile'] = basename($comicfull);
$data = array();

View File

@ -5,8 +5,9 @@ require 'header.php';
require_login();
if ( isset($_REQUEST['comic']) ) {
$comic = makePathSafe(base64_decode(urldecode(($_REQUEST['comic']))));
$comicfull = COMICSDIR . $comic;
$comicfull = realpath(COMICSDIR . base64_decode(urldecode($_REQUEST['comic'])));
if ( $comicfull === false ) exit();
if ( substr($comicfull, 0, strlen(COMICSDIR)) != COMICSDIR ) exit();
} else {
exit();
}

View File

@ -5,30 +5,6 @@ function microtime_float() {
return ((float)$usec + (float)$sec);
}
function makePathSafe($path = "") {
if ( $path == "" ) return "";
// Stick forward slashes on the ends to make matching more consistent
$path = "/" . $path . "/";
// Remove all instances of dots between forward slashes
while ( preg_match("/\/\.{0,}\//", $path) ) {
$path = preg_replace("/\/\.{0,}\//", "/", $path);
}
// Replace all instances of two consecutive forward slashes
while ( strpos($path, "//") !== false ) {
$path = str_replace("//", "/", $path);
}
// Remove all leading forward slashes
while ( substr($path, 0, 1) == '/' ) {
$path = substr($path, 1);
}
// Remove all trailing forward slashes
while ( substr($path, -1) == '/' ) {
$path = substr($path, 0, strlen($path)-1);
}
$path = "/" . $path;
return $path;
}
function makeThumb($item = "") {
if ( $item == "" ) { return false; }
if ( is_dir($item) ) {