Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 试图消除代码中的跨站点脚本(XXS)漏洞_Php_Html - Fatal编程技术网

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或PHP做了很多修改。我的任务是使用漏洞工具诊断问题,然后尝试修复它们。我发现最高的警报是跨站点脚本(XXS)警报。我已经读过这个漏洞,但在告诉我实际需要做什么时,我发现它相当混乱。代码如下:

<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你还有问题吗?如果是这样,请使用当前代码编辑/更新您的问题。很抱歉,忘记更新,这已解决问题,不再发出警报。谢谢