XSS又称CSS,全称Cross SiteScript(跨站脚本攻击), XSS攻击类似于SQL注入攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。

其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie信息、破坏页面结构、重定向到其它网站等。

理论上,只要存在能提供输入的表单并且没做安全过滤或过滤不彻底,都有可能存在XSS漏洞。



下面是一些最简单并且比较常见的恶意字符XSS输入:

1 XSS 输入通常包含 JavaScript 脚本,如弹出恶意警告框:<script>alert("XSS");</script>

2.XSS 输入也可能是 HTML 代码段,譬如:

1).网页不停地刷新 <meta http-equiv="refresh" content="0;">

2).嵌入其它网站的链接 <iframe src=http://xxxx width=250 height=250></iframe>

除了通过正常途径输入XSS攻击字符外,还可以绕过JavaScript校验,通过修改请求达到XSS攻击的目的,如下图:

了解到XSS攻击的原理和危害后,其实要预防也不难,下面提供一个简单的PHP防止XSS攻击的函数:

  1. <?PHP
  2. /**
  3. * @param $string
  4. * @param $low 安全别级低
  5. */
  6. function clean_xss(&$string, $low = False)
  7. {
  8. if (! is_array ( $string ))
  9. {
  10. $string = trim ( $string );
  11. $string = strip_tags ( $string );
  12. $string = htmlspecialchars ( $string );
  13. if ($low)
  14. {
  15. return True;
  16. }
  17. $string = str_replace ( array ('"', "\\", "'", "/", "..", "../", "./", "//" ), '', $string );
  18. $no = '/%0[0-8bcef]/';
  19. $string = preg_replace ( $no, '', $string );
  20. $no = '/%1[0-9a-f]/';
  21. $string = preg_replace ( $no, '', $string );
  22. $no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';
  23. $string = preg_replace ( $no, '', $string );
  24. return True;
  25. }
  26. $keys = array_keys ( $string );
  27. foreach ( $keys as $key )
  28. {
  29. clean_xss ( $string [$key] );
  30. }
  31. }
  32. //just a test
  33. $str = 'codetc.com<meta http-equiv="refresh" content="0;">';
  34. clean_xss($str); //如果你把这个注释掉,你就知道xss攻击的厉害了
  35. echo $str;
  36. ?>

PHP中的设置

PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中

  1. -----------------------------------------------------
  2. session.cookie_httponly =
  3. -----------------------------------------------------

设置其值为1或者TRUE,来开启全局的CookieHttpOnly属性,当然也支持在代码中来开启:

  1. <?php
  2. ini_set("session.cookie_httponly", 1);
  3. // or session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
  4. ?>

Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:

  1. <?php
  2. setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
  3. setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
  4. ?>



文章来自:https://mp.weixin.qq.com/s/3cnzbOt81od8TJY5K-aqvg

以上是文章的全部内容。一些小福利,请在【php自学中心】公众号里回复就可以获取

更多相关文章

  1. logstash用kafka作为输入源
  2. 【前端】手机号码输入框添加 空格
  3. 浏览器输入域名网址访问后的过程详解
  4. vscode安装和插件推荐与emmet语法使用
  5. 开发环境搭建与emmet语法
  6. VSCode安装及常用emmet语法
  7. 从0开始搭建云服务器,入门使用教程,搭建个人网站(上)
  8. 服务器如何有效防御DDOS攻击?可以配置香港高防吗?
  9. 小鸟云服务器 新增香港高防云服务器,抵御DDoS攻击

随机推荐

  1. android app的类响应式设计
  2. Android Studio无法加载API帮助文档问题
  3. Unity3D 调用Android的提供的接口
  4. [自定义控件]android自定义view实战之太
  5. Android SDK 2.0安装(配置图文教程)
  6. Android 5.1和Android 5.0相比有哪些变化
  7. android > 修改Android工程版本
  8. 每一位Android开发者应该知道的Android体
  9. Android RelativeLayout 属性&Android中
  10. 【安全】Android O 中的 Seccomp 过滤器