xss,csrf,SQL注入

一、Xss

1、定义:跨站脚步攻击,过滤用户表单提交的数据
2、防范措施:
       a.使用PHP内置函数:htmlspecialchars(),strip_tags,trim,addslashes。
        b.PHP所有打印的语句如echo,print等,在打印前都要使用htmlentities() 进行过滤,

          这样可以防止Xss,注意中文要写htmlentities($name,ENT_NOQUOTES,GB2312)

        c.php防注入和XSS攻击通用过滤函数

            

 
  
  1. <?php
  2. //php防注入和XSS攻击通用过滤.
  3. //by qq:831937
  4. $_GET && SafeFilter($_GET);
  5. $_POST && SafeFilter($_POST);
  6. $_COOKIE && SafeFilter($_COOKIE);
  7. function SafeFilter (&$arr)
  8. {
  9. $ra=Array('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','/script/','/javascript/','/vbscript/','/expression/','/applet/','/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/title/','/bgsound/','/base/','/onload/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/','/onabort/','/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmousemove/','/onmouseout/','/onmouseover/','/onmouseup/','/onunload/');
  10. if (is_array($arr))
  11. {
  12. foreach ($arr as $key => $value)
  13. {
  14. if (!is_array($value))
  15. {
  16. if (!get_magic_quotes_gpc()) //不对magic_quotes_gpc转义过的字符使用addslashes(),避免双重转义。
  17. {
  18. $value = addslashes($value); //给单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)加上反斜线转义
  19. }
  20. $value = preg_replace($ra,'',$value); //删除非打印字符,粗暴式过滤xss可疑字符串
  21. $arr[$key] = htmlentities(strip_tags($value)); //去除 HTML 和 PHP 标记并转换为 HTML 实体
  22. }
  23. else
  24. {
  25. SafeFilter($arr[$key]);
  26. }
  27. }
  28. }
  29. }
  30. ?>

二、CSRF

     1、定义:跨站请求伪造(攻击者盗用了你的身份,以你的名义发送恶意请求)
      2.CSRF攻击原理及过程如下:
               a. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

               b.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

                c. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

                d. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

                e. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

       3.防范措施:
            a.在HTTP请求中增加token并验证
            b.在HTTP头中自定义属性并验证
            c.验证 HTTP Referer 字段
            d.增加验证码机制(图片验证码)
        

三、SQL注入
     1.坚持两个原则
            a.对输入的数据进行过滤(addslashes())
            b.转义用于向数据库发出的数据(mysql_real_escape_string())
            c. 使用支持参数化查询语句和占位符的数据库操作类(如PEAR::DB, PDO等),你就会多得到一层保护
           d.过滤输入
           e.变量类型限制
           f.采用PDO操作数据库
           g.配置好数据库的用户权限

四、就是在PDO底层是如何处理该sql语句的,可以这么有效的防止注入问题

猜你喜欢

转载自blog.csdn.net/angle_jian/article/details/79378867