Hey,
Zitat
Muss ich in der Profile.php auch was ändern?
Ja! Aufjedenfall. Diese Seite darf so niemals online gehen. Du nimmst die Eingabe des Users und speicherst diese ungefiltert in eine Session. Das ist nicht das Problem. Aber wenn du diese dann ohne Beachtung des Kontextwechsels und der Maskierungen ausgibst dann wird der schädliche Code ausgeführt. Darüberhinaus hast du da auch eine SQL-Injection-Stelle drin.
Bei XSS-Angriffen über das Formular ist der Post, der von außen kommt, erst dann schädlich wenn man diesen ohne Umwandlung ausgiebt. Denn man führt bei der Ausgabe diesen Code aus. Man muss ebenso generell davon ausgehen, dass die Usereingabe potentiell gefährlich ist und das auch in der Datenbank potentiell gefährliche Daten liegen können.
Darüberhinaus benutzt du beim Formular POST. Das heißt die abgesendeten Daten des Formulars sind nur in diese POST-Kanal drin.
Wenn du es mit PDO machst und die Eingaben, welche du durch das Formular erhälst, so behandelst wie ich es oben erwähnt habe würde das ganze so aussehen:
<?php
include("main.php");
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Willkommen</title>
<meta charset="utf-8">
<link rel="stylesheet" href="/resourcen/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="Sebastian Kiefer">
<meta name="publisher" content="Sebastian Kiefer">
<meta name="copyright" content="Sebastian Kiefer">
<meta name="description" content="Tutorials über HTML5, CSS3 und PHP. Außerdem zeige ich in der Kategorie Blog Fotos über Reisen sowie über Natur.">
<meta name="keywords" content="Sebastian, Kiefer, @kiefer2003, HTML, CSS, PHP, Natur, Reisen, Tutorials, Blog, ">
<meta name="page-topic" content="Dienstleistung">
<meta name="page-type" content="Private Homepage">
<meta name="audience" content="Anfänger, Fortgeschrittene, Jugendliche, Studenten">
<meta http-equiv="content-language" content="de">
<meta name="robots" content="index, follow">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="/resourcen/js/navigation-menu.js"></script>
</head>
<body>
<header class="navigation">
<nav class="navigation-nav">
<div class="header">
<a class="logo" href="/">Sebastian Kiefer</a>
<div class="ham-box">
<div class="hamburger" id="hamburger">
<span class="sk_ham_line"></span>
<span class="sk_ham_line"></span>
<span class="sk_ham_line"></span>
</div>
</div>
</div>
<ul class="navigation-ul">
<li><a href="/">Home</a></li>
<li><a href="/ueber-mich">About</a></li>
<li><a href="/tutorials">Tutorials</a></li>
<li><a href="/blog">Blog</a></li>
<li><a href="/kontakt">Kontakt</a></li>
<li class="sk_nav_signup"><a href="/login/signup">SignUp</a></li>
</ul>
</nav>
</header>
<header class="login_status" style="text-align: right;width: 100%;background-color: #4678b6;">
<p style="margin: 0; padding-right: 30px;">
</p>
</header>
<section class="sk_wrapper sk_normal_content">
<article class="sk_normal_content_article sk_normal_content_wrapper form_article">
<header>
<h2>Willkommen</h2>
</header>
<main>
<?php
if(isset($ausgabe) && isset($active)){
echo $ausgabe;
} else if(!isset($active)){
exit($ausgabe);
}
if(isset($rows)){
foreach ($rows as $key => $value) {
echo "<p>Vorname:" . htmlspecialchars($value['firstName']) . "</p>";
echo "<p>Nachname:" . htmlspecialchars($value['lastName']) . "</p>";
echo "<p>Status:" . htmlspecialchars($value['privateStatus']) . "</p>";
}
}
?>
<!-- Privates Profil -->
<form method="POST">
<p><label>Dein Vorname<br><input type="text" name="first_name" value="<?php if(isset($first_name)) echo htmlspecialchars($first_name); ?>"></label></p>
<p><label>Dein Nachname<br><input type="text" name="last_name" value="<?php if(isset($last_name)) echo htmlspecialchars($last_name); ?>"></label></p>
<p><label>Über dich:<br><textarea name="about_you_private"></textarea></label></p>
<p><label><input type="submit" name="data_save_about" value="Speichern"></label></p>
</form>
</main>
<footer>
<p>
<?php
if(isset($active)) {
echo '<a href="/login/logout.php">Log Out</a>';
}
else {
echo 'Überprüfen sie ihren Posteingang';
}
?>
</p>
</footer>
</article>
</section>
<footer id="footer">
<div class="sk_content_wrapper">
<div class="sk_flex">
<div class="copyright">
© Sebastian Kiefer. <a href="/impressum">Impressum</a> <a href="/datenschutz">Datenschutz</a>
</div>
<ul class="sk_icons">
<li><a href="#" class="sk_icon fa-facebook"><span class="label">Facebook</span></a></li>
<li><a href="#" class="sk_icon fa-twitter"><span class="label">Twitter</span></a></li>
<li><a href="#" class="sk_icon fa-linkedin"><span class="label">LinekedIn</span></a></li>
<li><a href="#" class="sk_icon fa-pinterest"><span class="label">Pinterest</span></a></li>
<li><a href="#" class="sk_icon fa-vimeo"><span class="label">Vimeo</span></a></li>
</ul>
</div>
</div>
</footer>
</body>
</html>
Alles anzeigen
main.php:
<?php
/* Displays user information and some useful messages */
session_start();
error_reporting(E_ALL);
$_SESSION['logged_in'] = 1; // simuliere Session "logged_in"
$_SESSION['active'] = "true"; // símuliere Session active
$_SESSION['email'] = "test@test.de";
$active = $_SESSION['active'];
try{
$dbConnection = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "");
$selectSql = "SELECT firstName, lastName, privateStatus FROM formular WHERE email = :email";
$selectStmt = $dbConnection->prepare($selectSql);
$selectResult = $selectStmt->execute(
array(
":email" => $_SESSION['email']
)
);
$rows = $selectStmt->fetchAll(PDO::FETCH_ASSOC);
if(!isset($active)){
$ausgabe = '<p>Dein Account ist nicht bestätigt. Um ihn zu bestätigen bitte auf den Link in deiner Email klicken.<br><a href="#">Startseite</a></p>';
} else{
$ausgabe = "<p>Hallo" . htmlspecialchars($rows[0]["firstName"]) . " " . htmlspecialchars($rows[0]["lastName"]) . "</p>";
}
}catch(EXCEPTION $w){
echo "Fehler aufgetreten: " . $w->getMessage();
exit();
}
//require '../inc/sql/db.php';
// Check if user is logged in using the session variable
if ( $_SESSION['logged_in'] != 1 ) {
exit("Sie müssen sich zuerst <a href='#'>hier</a> anmelden!");
} else if(isset($_POST['data_save_about'])){
$first_name = filter_var(trim($_POST['first_name']), FILTER_SANITIZE_STRING);
$last_name = filter_var(trim($_POST['last_name']), FILTER_SANITIZE_STRING);
$about_your_private = filter_var(trim($_POST['about_you_private']), FILTER_SANITIZE_STRING);
$email = $_SESSION['email'];
try{
$insertSql = "INSERT INTO formular(firstName, lastName, privateStatus, email) VALUES (:firstName, :lastName, :privateStatus, :email)";
$insertStmt = $dbConnection->prepare($insertSql);
$insertResult = $insertStmt->execute(
array(
":firstName" => $first_name,
":lastName" => $last_name,
":privateStatus" => $about_your_private,
":email" => $_SESSION['email']
)
);
}catch(EXCEPTION $e){
echo "Fehler aufgetreten: " . $e->getMessage();
exit();
}
}
Alles anzeigen