Javascript 防止xss攻击/注入

Javascript 防止xss攻击/注入,javascript,php,html,escaping,xss,Javascript,Php,Html,Escaping,Xss,我在这方面做了很多研究,但我似乎找不到问题的确切答案,比如把什么代码放在哪里 因此,我正在构建一个简单的网站,供用户登录和玩javascript游戏。该网站还没有建立和运行,但我收到了一封来自陌生人的随机电子邮件,说我的网站易受XSS攻击,并向我发送了一个链接,该链接重定向到我的网站。当我回到我的网站时,一个警报出现了,上面显示了cookies和一些我不知道的东西。该链接不再处于活动状态,因此我无法向您显示添加到登录表单输入字段的脚本 有没有办法防止恶意用户这样做?这是我的登录代码,如果有帮助的

我在这方面做了很多研究,但我似乎找不到问题的确切答案,比如把什么代码放在哪里

因此,我正在构建一个简单的网站,供用户登录和玩javascript游戏。该网站还没有建立和运行,但我收到了一封来自陌生人的随机电子邮件,说我的网站易受XSS攻击,并向我发送了一个链接,该链接重定向到我的网站。当我回到我的网站时,一个警报出现了,上面显示了cookies和一些我不知道的东西。该链接不再处于活动状态,因此我无法向您显示添加到登录表单输入字段的脚本

有没有办法防止恶意用户这样做?这是我的登录代码,如果有帮助的话

<form method="post">            
  <p>Login</p>
  <div class="form-group">
  <label for="login" style="float:left">Email or username</label>
  <input class="form-control" name="login" value="<?php echo addslashes($_POST['login']); ?>"/> 
  <label for="loginpassword" style="float:left">Password</label>
  <input class="form-control" type="password" name="loginpassword" value="<?php echo addslashes($_POST['loginpassword']); ?>"/>
  </div>
  <input type="submit" class="btn btn-success btn-lg wrap" name="submit" value="login"/>

  <?php
    if($error) {
      echo '<div class="alert alert-danger" id="errorDiv">'.addslashes($error).'</div>';                
    }   
  ?>    
</form>

登录

电子邮件或用户名
从login.php文件:

<?php
    if ($_POST['submit']=="login") 
    {
      $login = mysqli_real_escape_string($connection_info, $_POST['login']);
      $loginpw = $_POST['loginpassword'];

      //check database see if correct login details
      // if not found then $error = "incroorect login details" etc
      // if login details then match assign id from database as session variable for authentication
    }   
?>     


有人能确切地告诉我,我需要为这个特殊的表单避免XSS吗?从我所读到的内容来看,对于文本字段的值,使用htmlspecialchars而不是addslashes似乎更有用,但我不确定这是否能解决问题。

任何类型的注入的概念都是命令和数据之间的模糊性。当您遇到在命令的同一位置使用任意数据的情况时,您就有了一个潜在的注入点

它适用于XSS,就好像攻击者可以通过巧妙地使用输入来控制您网页上的内容一样,他们可以添加恶意脚本并做任何他们想做的事情

您遇到的问题是在哪里使用
addslashes()
。这不适合转义要在HTML上下文中使用的数据。您有文本数据,但实际上您将其视为HTML,因为您将其直接注入页面。攻击者可以插入一些
$\u POST
数据,这些数据将向您的页面添加脚本标记或其他内容

要解决此问题,请正确转义在不同上下文中使用的所有数据。在您的例子中,HTML中变量周围的
htmlspecialchars()
就是您想要的


您的
$error
消息也需要相同的代码。当然,您不太可能攻击自己的站点,但您希望生成有效的HTML,对吗?当一个错误的括号出现在错误消息中并破坏了您的页面时,不要感到惊讶。

永远不要相信来自您无法控制的设备的任何东西,在这种情况下,我假设它是一个浏览器。您必须清理或过滤所有内容,使其在返回浏览器时无法在浏览器中执行。您还需要确保它不能用于SQL注入等,但这是另一个问题

您需要尽可能多地阅读XSS。这个网站非常有用

跨站点脚本(XSS)攻击发生在以下情况:

数据通过不受信任的源(通常是Web请求)进入Web应用程序

数据包含在发送到web的动态内容中 未经恶意内容验证的用户

在您的示例中,有一个表单似乎正在获取原始POST数据并将其返回给用户ie

 <input class="form-control" name="login" value="<?php echo addslashes($_POST['login']); ?>"/> 

谢谢你的回答。事实上,我确实在不久前阅读了这个链接以及其他信息。据我所知,addslashes是问题所在,我需要使用htmlspecialchars。但我只是想100%确定这是唯一的XSS漏洞。
<input class="form-control" type="password" name="loginpassword" value="<?php echo addslashes($_POST['loginpassword']); ?>"/>