首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止xss攻击/注入

防止xss攻击/注入
EN

Stack Overflow用户
提问于 2016-04-07 01:54:11
回答 2查看 774关注 0票数 0

我已经对此做了相当多的研究,但我似乎无法找到问题的确切答案,比如在哪里放置哪些代码。

因此,我正在建立一个简单的网站,供用户登录和玩javascript游戏。该网站还没有启动和运行,但我收到了一个陌生人的随机电子邮件说,我的网站是脆弱的XSS,并给我一个链接,重定向到我的网站。当我回到我的网站,一个警报出现了饼干和其他一些我不知道的东西。链接不再是活动的,所以我不能向您展示添加到登录表单输入字段的脚本。

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

代码语言:javascript
复制
<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文件:

代码语言:javascript
复制
<?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而不是加号似乎更有用,但我不确定这是否会解决问题。

EN

回答 2

Stack Overflow用户

发布于 2016-04-07 01:59:50

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

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

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2016-04-07 02:07:07

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

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

(XSS)

在以下情况下发生跨站点脚本(XSS)攻击: 数据通过不受信任的源(最常见的是Web请求)进入web应用程序。 该数据包含在发送给web用户的动态内容中,而不对恶意内容进行验证。

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

代码语言:javascript
复制
 <input class="form-control" name="login" value="<?php echo addslashes($_POST['login']); ?>"/> 

代码语言:javascript
复制
<input class="form-control" type="password" name="loginpassword" value="<?php echo addslashes($_POST['loginpassword']); ?>"/>

虽然像堆栈溢出这样的站点可以为您的问题提供一个点解决方案,但您真正需要的是对XSS等的一般理解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36465342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档