XSS攻击
原理:
  XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。xss漏洞一般发生于与用户交互的地方。

危害:
  恶意弹出消息框,影响用户体验
  获取用户的cookie或者ajax请求攻击者的服务器窃取用户信息
  可以使用ajax不断调用被攻击网站的某个接口,严重的可能导致带宽被打满无法正常处理用户的请求,除此之外也可以通过调用被攻击网站的某个接口来实现一些个人利益比如在社交网站伪造数据提高影响力等。
预防办法:
  参数验证,只接受用户输入我们期待的值
  使用htmlspecialchars函数将用户输入的HTML标签实体化
  CSRF攻击
原理:
  CSRF(Cross-site request forgery),中文名称:跨站请求伪造,就是冒充用户发请求。比如:灌水机器人等。

危害:
  服务器处理大量虚假的请求数据库储存过多垃圾信息影响服务器处理正常请求的性能
预防办法:
  暂时的方法:分析日志找到发送请求的ip,禁止访问;
  验证码:设置机器难以识别的验证码,比如掺杂中文的验证码,拖动的验证码等;
  设置token验证,基本原理是通过比较隐藏的表单传过来的用户发出请求的时间与收到请求时的时间比较,允许一定范围的延时,防止被破解可以加入秘钥和随机字符串。(time()->md5(秘钥).time()->rand.substr(md5(rand秘      钥),0,10).time())

SQL注入
原理:
  SQL Injection:是一种利用未过滤/未审核用户输入的攻击方法,通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

例子:
  SQL注入一般是利用‘’或者“”拼接SQL语句或者–注释掉原有的SQL语句,减少查询的条件获取更多信息或者尝试猜测表名,一旦知道表名就可以对表做增删改查等各种操作。下面是几个常见的SQL注入的例子:

  1)将查询的where条件变成恒真,
    正常的SQL查询语句(xxx为用户要输入的内容):

    SELECT fieldlist FROM table WHERE fieldname='xxx';
  1
    如果输入 xxx’ or ‘1’='1,SQL语句就变成了

    SELECT fieldlist FROM table WHERE fieldname='xxx' or '1'='1';
  1
    这样的话where条件就不起作用了。

  2)猜字段名(–注释掉后面的内容)

    SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND userid IS NULL; --';
    SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND email IS NULL; --';
    SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND password IS NULL; --';
    SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND loginid IS NULL; --';

    上面的语句如果正常执行的话,就说明我们猜测的字段名字是正确的,否则说明猜错了,继续猜。

  3)跟上面同样的道理,利用子查询猜测表名:

    SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND 1=(SELECT COUNT(*) FROM tabname); --';

    根据经验推断表名,进行尝试,我们并不关心表里面有多少条记录而是判断当前的表名是不是我们猜测的这个。

  4)除了对表进行增删改查以外实际上还可修改数据库

     SELECT fieldlist FROM table WHERE fieldname = 'xxx'; DROP TABLE members; --';


  利用 ; 结束上一条语句,在–注释掉后面的语句执行单行多条语句,可能会恶意修改数据库或者更新某个字段的内容。

危害:
  // 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
  // 网页篡改:通过操作数据库对特定网页进行篡改。
  // 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
  // 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
  // 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
  // 破坏硬盘数据,瘫痪全系统。
 预防办法:
  // 参数绑定,预处理。
  // 一定要接SQL语句抛出的异常,否则容易泄露表名、字段名、数据库服务器等信息

session文件漏洞
  Session攻击是黑客最常用到的攻击手段之一。当一个用户访问某一个网站时,为了免客户每进人一个页面都要输人账号和密码,PHP设置了Session和Cookie用于方便用户的使用和访向。

对于Session漏洞的防范:
  从前面的分析可以知道,Session攻击最常见的就是会话劫持,也就是黑客通过各种攻击手段获取用户的Session ID,然后利用被攻击用户的身份来登录相应网站。为此,这里可以用以下几种方法进行防范:一是定期更换Session ID,更换Session ID可以用PHP自带函数(session_id())来实现;

  二是更换Session名称,通常情况下Session的默认名称是PHPSESSID,这个变量一般是在cookie中保存的,如果更改了它的名称,就可以阻档黑客的部分攻击;

  三是对透明化的Session ID进行关闭处理,所谓透明化也就是指在http请求没有使用cookies来制定Session id时,Sessioin id使用链接来传递.关闭透明化Session ID可以通过操作PHP.ini文件来实现;四是通过URL传递隐藏参数,这样可以确保即使黑客获取了session数据,但是由于相关参数是隐藏的,它也很难获得Session ID变量值。

全局变量漏洞
  PHP中的变量在使用的时候不像其他开发语言那样需要事先声明,PHP中的变量可以不经声明就直接使用,使用的时候系统自动创建,而且也不需要对变量类型进行说明,系统会自动根据上下文环境自动确定变量类型。这种方式可以大大减少程序员编程中出错的概率,使用起来非常的方便。

对全局变量漏洞防范:
  对于PHP全局变量的漏洞问题,以前的PHP版本存在这样的问题,但是随着PHP版本升级到5.5以后,可以通过对php.ini的设置来实现,设置ruquest_order为GPC。另外在php.ini配置文件中,可以通过对magic_quotes_runtime进行布尔值设置是否对外部引人的数据中的溢出字符加反斜线。为了确保网站程序在服务器的任何设置状态下都能运行。可以在整个程序开始的时候用get_magic_quotes_runtime检测设置状态决定是否要手工处理,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉。

文件漏洞
  文件漏洞通常是由于网站开发者在进行网站设计时对外部提供的数据缺乏充分的过滤导致黑客利用其中的漏洞在Web进程上执行相应的命令。假如在lsm.php中包含这样一段代码:include($b."/aaa.php".),这对黑客来说,可以通过变量$b来实现远程攻击,可以是黑客自已的代码,用来实现对网站的攻击。可以向服务器提交a.php include=http://lZ7.0.0. 1/b.php,然后执行b.php的指令。

对文件漏洞的防范:
  对于PHP文件漏桐可以通过对服务器进行设置和配置来达到防范目的。这里具体的操作如下:

    一是把PHP代码中的错误提示关闭,这样可以避免黑客通过错误提示获取数据库信息和网页文件物理路径;

    二是对open_basedir尽心设置,也就是对目录外的文件操作进行禁止处理;这样可以对本地文件或者远程文件起到保护作用,防止它们被攻击,这里还要注意防范Session文件和上载文件的攻击;

    三是把safe-made设置为开启状态,从而对将要执行的命令进行规范,通过禁止文件上传,可以有效的提高PHP网站的安全系数。

php常见安全问题的更多相关文章

  1. asp.net MVC 常见安全问题及解决方案

    asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session rid ...

  2. (转载)RESTful架构风格下的4大常见安全问题

    转载自<RESTful架构风格下的4大常见安全问题>,作者:马伟 伴随着RESTful架构风格的大量应用微服务架构的流行,一些本来难以察觉到的安全问题也逐渐开始显现出来.在我经历过的各种采 ...

  3. [转]asp.net MVC 常见安全问题及解决方案

    本文转自:http://www.cnblogs.com/Jessy/p/3539564.html asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request ...

  4. 这些Kubernetes常见安全问题,你遇到过几个?

    导语:在 Threat Stack 公布的2020年第一季度安全报告中,列举了在AWS Web服务部署Kubernetes的组织所遇到的最常见安全问题. 该报告建议已部署Kubernetes的IT组织 ...

  5. Web 开发常见安全问题

    不是所有 Web 开发者都有安全的概念,甚至可能某些安全漏洞从来都没听说过.这就是这篇科普文章的存在意义,希望 Web 开发者在开发时能依此逐条检查代码中的安全问题. 注:服务器运维相关的安全注意事项 ...

  6. 【转】web常见安全问题以及测试方法

    web安全是我们测试组一直以来作为和性能测试并驾齐驱的两个重点.开发的过程中还需要着重注意,该转义的地方转义:该屏蔽的地方屏蔽,该过滤的地方过滤等等.年底又到了,势必又有大批的发号抽奖之类的活动开发. ...

  7. Web开发常见安全问题

    转载自: http://blog.csdn.net/fengyinchao/article/details/50775121 不是所有 Web 开发者都有安全的概念,甚至可能某些安全漏洞从来都没听说过 ...

  8. Web项目开发中常见安全问题防范

    本文章纯粹是个人收藏,其中各种也是略略了解,下面直接贴出知识点./捂脸/捂脸 计算机程序主要就是输入/输出,安全问题由此产生,凡是有输入的地方都可能带来安全风险.根据输入的数据类型,web应用主要有数 ...

  9. Web项目开发中常见安全问题及防范

    计算机程序主要就是输入数据 经过处理之后 输出结果,安全问题由此产生,凡是有输入的地方都可能带来安全风险.根据输入的数据类型,Web应用主要有数值型.字符型.文件型. 要消除风险就要对输入的数据进行检 ...

随机推荐

  1. Git命令篇

    前文: Git有三种状态,你的文件可能处于其中之一:已提交(committed),已修改(modiffied)和已暂存(staged) 三个工作区域概念:Git仓库.工作目录以及暂存区 Git保存信息 ...

  2. CALayer创建图层(转)

    一.添加一个图层  添加图层的步骤:  1.创建layer  2.设置layer的属性(设置了颜色,bounds才能显示出来)  3.将layer添加到界面上(控制器view的layer上) @int ...

  3. 用户交互input

    input() 函数 接收到的都是str,如果输入为数字,打印结果想进行运算,此时需要转义.语法:内容=input("提示信息")这里可以直接获取到用户输入的内容. a = inp ...

  4. Python的核心数据类型

    ​ Python的核心数据类型有:数字,字符串,列表,字典,元组,文件等. 数字 ​ 数字类型有:整形int,浮点型float,复数complex,布尔型bool. 整形 ​ 整型数是不带有小数部分的 ...

  5. gcc 手动安装

    由于公司内部服务器没有联通外网,只能苦逼的手动安装gcc(自带的版本太老) rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm rpm -ivh cloog-ppl-0.15. ...

  6. 关于linux命令的说明

    开始前我们必须先认识绝对路径与相对路径 绝对路径是从盘符开始的路径 :例如:/etc/sysconfig/network (从根直接指到network) 相对路径是从当前自己所在位置开始的路径:例如我 ...

  7. vue服务端渲染添加缓存

    缓存 虽然 Vue 的服务器端渲染(SSR)相当快速,但是由于创建组件实例和虚拟 DOM 节点的开销,无法与纯基于字符串拼接(pure string-based)的模板的性能相当.在 SSR 性能至关 ...

  8. Mysql基础1-基础语法-字段类型

    主要: 基础 字段类型 基础 基本概念 1) 数据库分类 层次数据库,网状数据库,关系数据库 常见:SQL Server, Oracle,infomix,sybase,ibmDB2,Mysql 2)数 ...

  9. Scrapy之Cookie和代理

    cookie cookie: 获取百度翻译某个词条的结果 一定要对start_requests方法进行重写. 两种解决方案: 1. Request()方法中给method属性赋值成post2. For ...

  10. linux文件操作篇 (三) 文件状态和操作属性

    #include <sys/stat.h>   int fstat(int fildes, struct stat *buf); 获取文件信息  int lstat(const char* ...