Originalmente inviato da
karl94
Sì, ma devi controllare ciò che viene passato dall'esterno, cosa accadrebbe se uno usasse come URL
image.php?img=../image.php? Un malintenzionato potrebbe ottenere il contenuto di tutti gli script PHP (così come degli altri file) presenti nello spazio web, cercare magari vulnerabilità presenti negli stessi e sfruttarle.
Un attacco di questo tipo viene detto
Path traversal, un modo per proteggersi potrebbe essere quello suggerito qua:
http://stackoverflow.com/questions/4...answer-4205278.
Grazie, modificato di conseguenza:
image.php
Codice PHP:
<?php
/* Verifica Login */
session_start();
if(!isset($_SESSION['login']))
{
header('Location:/errors/403.htm');
}
/* Recupero Immagine */
if(isset($_GET['img']))
{
$dir_img = './images/';
$img_path = $dir_img . $_GET['img'];
$real_dir_img = realpath($dir_img);
$real_img_path = dirname(realpath($img_path));
if ($real_img_path===$real_dir_img && $real_img_path==true && file_exists($img_path))
{
header('Content-Type: image/jpeg');
echo file_get_contents($img_path);
}
else echo 'PHP Image Error: PATH or FILE missing';
}
else echo 'PHP Image Error: GET missing!';
?>
E visto che ci siamo, non è che c'è qualche falla di sicurezza nello script di login?
index.php
Codice PHP:
<?php
session_start();
$password="ciao";
if (isset($_SESSION['login'])) {
if (isset($_POST['logout'])) {
unset($_SESSION['login']);
$messaggio = "Logout successfully!";
} else {
header("Location: page.php");
}
} else {
if (isset($_POST['password'])) {
if ($_POST['password'] == $password) {
$_SESSION['login'] = "Login effettuato!";
header("Location: page.php");
} else {
$messaggio = "ACCESS DENIED! INVALID PASSWORD!";
}
}
}
?>
Grazie ancora!