Php 试图消除代码中的跨站点脚本(XXS)漏洞
直到最近,我才在这个类中对HTML或PHP做了很多修改。我的任务是使用漏洞工具诊断问题,然后尝试修复它们。我发现最高的警报是跨站点脚本(XXS)警报。我已经读过这个漏洞,但在告诉我实际需要做什么时,我发现它相当混乱。代码如下:Php 试图消除代码中的跨站点脚本(XXS)漏洞,php,html,Php,Html,直到最近,我才在这个类中对HTML或PHP做了很多修改。我的任务是使用漏洞工具诊断问题,然后尝试修复它们。我发现最高的警报是跨站点脚本(XXS)警报。我已经读过这个漏洞,但在告诉我实际需要做什么时,我发现它相当混乱。代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Form Login</t
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Form Login</title>
</head>
<body OnLoad="document.main.username.focus();">
<table >
<tr>
<td colspan="2">
<h4>Enter your Username and Email Address to continue</h4>
</td>
</tr>
<!-- create the main form with an input text box named uid and a password text box named mypassword -->
<form name="main" method="post" action="authcheck.php">
<tr>
<td>username:</td>
<td><input name="username" type="text" size="50"></td>
</tr>
<tr>
<td>Email Address:</td>
<td><input name="emailadd" type="text" size="50"></td>
</tr>
<tr>
<td colspan="2" align="center"><input name="btnsubmit" type="submit" value="Submit"></td>
</tr>
</table>
</form>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Authenticate </title>
</head>
<body>
<?php
// Retrieve Post Data
$username = $_POST["username"];
$email = $_POST["emailadd"];
// Set the session information
session_start();
$_SESSION['appusername'] = $username;
$_SESSION['appemail'] = $email;
// Display the Session information
echo "<h3> Session Data </h3>";
echo "<table border='1'>";
echo "<tr>
<td>Username </td>
<td> Email </td>
</tr>";
echo "<tr>
<td>" . $_SESSION['appusername'] . "</td>";
echo "<td>" . $_SESSION['appemail']. "</td>";
echo "</tr>";
echo "</table>";
// Provide a button to logout
echo "<form name='logout' method='post' action='logout.php'>
<input name='btnsubmit' type='submit' value='Logout'>
</form>";
?>
</body>
</html>
表单登录
输入您的用户名和电子邮件地址以继续
用户名:
电邮地址:
上面提到的下一个程序如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Form Login</title>
</head>
<body OnLoad="document.main.username.focus();">
<table >
<tr>
<td colspan="2">
<h4>Enter your Username and Email Address to continue</h4>
</td>
</tr>
<!-- create the main form with an input text box named uid and a password text box named mypassword -->
<form name="main" method="post" action="authcheck.php">
<tr>
<td>username:</td>
<td><input name="username" type="text" size="50"></td>
</tr>
<tr>
<td>Email Address:</td>
<td><input name="emailadd" type="text" size="50"></td>
</tr>
<tr>
<td colspan="2" align="center"><input name="btnsubmit" type="submit" value="Submit"></td>
</tr>
</table>
</form>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Authenticate </title>
</head>
<body>
<?php
// Retrieve Post Data
$username = $_POST["username"];
$email = $_POST["emailadd"];
// Set the session information
session_start();
$_SESSION['appusername'] = $username;
$_SESSION['appemail'] = $email;
// Display the Session information
echo "<h3> Session Data </h3>";
echo "<table border='1'>";
echo "<tr>
<td>Username </td>
<td> Email </td>
</tr>";
echo "<tr>
<td>" . $_SESSION['appusername'] . "</td>";
echo "<td>" . $_SESSION['appemail']. "</td>";
echo "</tr>";
echo "</table>";
// Provide a button to logout
echo "<form name='logout' method='post' action='logout.php'>
<input name='btnsubmit' type='submit' value='Logout'>
</form>";
?>
</body>
</html>
用户验证
问题是,在将用户名或密码写入该表之前,您没有在中清理用户名或密码。问题是,在将其写入该表之前,您没有在中清理用户名或密码。因为您在此处打印变量:
echo "<tr>
<td>" . $_SESSION['appusername'] . "</td>";
echo "<td>" . $_SESSION['appemail']. "</td>";
echo "</tr>";
然而,您应该使用filter\u var做更多的事情。
:
因为您正在此处打印变量:
echo "<tr>
<td>" . $_SESSION['appusername'] . "</td>";
echo "<td>" . $_SESSION['appemail']. "</td>";
echo "</tr>";
然而,您应该使用filter\u var做更多的事情。
:
使用以下命令清理$username
和$email
变量
$username = htmlspecialchars($_POST['username']);
$email = htmlspecialchars($_POST['emailadd']);
或
htmlentities()
将所有字符替换为HTML变量,而htmlspecialchars()代码>替换少量字符
请注意,这是清理POST数据的最基本形式。您可以查看此文件以获得更“复杂”的清理和验证。使用以下命令清理$username
和$email
变量
$username = htmlspecialchars($_POST['username']);
$email = htmlspecialchars($_POST['emailadd']);
或
htmlentities()
将所有字符替换为HTML变量,而htmlspecialchars()代码>替换少量字符
请注意,这是清理POST数据的最基本形式。您可以查看此文件以获得更为“复杂”的消毒和验证。嗯,您需要提供更多的代码以及您得到的确切错误。。。什么工具在检查这个?我正在使用一个名为ZAP@RandyGilman像来自OWASP的ZAP?是的,这是一个。嗯,你需要提供更多的代码和你得到的确切错误。。。什么工具在检查这个?我正在使用一个名为ZAP@RandyGilman像来自OWASP的ZAP?是的,就是这个。好的,我将尝试搜索如何清理用户名和密码。您还可以查看输入验证。您基本上希望防止任何不必要的代码执行。在上面提供的页面中,用户可以将javascript或php传递到用户名或密码字段,然后执行该字段。好的,我将尝试搜索如何清理用户名和密码。您还可以查看输入验证。您基本上希望防止任何不必要的代码执行。在您上面提供的页面中,用户可以将javascript或php传递到用户名或密码字段,然后执行该字段。代码应该放在哪里?因为我在请求用户输入后立即将其放在那里,但不会加载?@RandyGilman将其替换为//Retrieve Post Data
下的代码正确位置在哪里放置代码的位置,因为在它要求用户输入代码后,我立即将其放置在那里,但它不会加载?@RandyGilman将其替换为您在//检索帖子数据
下的代码。我清理了用户名并添加了if station,但我现在一直得到一个跨站点脚本(反映)。这比以前好,因为我有两个警报,但现在我只有一个。你知道反射部分是什么意思吗?@RandyGilman你还有问题吗?如果是这样,请使用当前代码编辑/更新您的问题。很抱歉,忘记更新,这已解决问题,不再发出警报。ThanksI清理了用户名并添加了if语句,但我现在一直得到一个跨站点脚本(反映)。这比以前好,因为我有两个警报,但现在我只有一个。你知道反射部分是什么意思吗?@RandyGilman你还有问题吗?如果是这样,请使用当前代码编辑/更新您的问题。很抱歉,忘记更新,这已解决问题,不再发出警报。谢谢