6个PHP常见的安全性攻击

了解常见的PHP应用程序安全威胁,以便确保你的PHP应用程序不受攻击。在这里呢,博主给大家分享6个常见的PHP安全攻击,也为了方便大家的学习。

1、SQL注入

  SQL注入是一种恶意攻击,也是我们常见的一种攻击方式。用户利用在表单字段输入SQL语句的方式来影响SQL语句的正常运行,还有一种就是通过system()或者exec()命令注入,它具有相同的SQL注入机制,但是呢,这个只是针对shell命令。

  这种攻击方式主要是依赖于SQL语句的疏忽,但是怎么解决呢,下面给大家一个详细的方法:

  使用mysql_real_escape_string()过滤数据类型

  手动检查每一数据是否为正确的数据类型

  使用预处理语句并且绑定变量

  使用准备好的预处理语句

  分离语句和SQL逻辑

  预处理语句将自动过滤(如:转义)

  把以上呢作为一个编码规范,就可以帮助新人避免遇到以上的问题。或者是用另外一个办法。咱们首先得明确防止SQL注入这么一个概念,就是因为SQL语句的疏忽,根本解决措施就是加强对请求命令尤其是查询请求命令的过滤,具体解决措施就是:

  一是把过滤性语句进行参数化处理,也就是通过参数化语句实现用户信息的输入而不是直接把用户输入嵌入到语句中

  二是在网站开发的时候尽可能减少使用解释性程序,黑客经常通过这种手段来执行非法命令

  三是在网站开发的时候尽量避免网站出现bug,否则黑客可能利用这些信息来攻击网站

当然,咱们仅仅通过防御SQL注入肯定是不够的,还需要使用专业的漏洞扫描工具来对网站进行漏洞扫描。

2、XSS攻击

  XSS(跨站点脚本攻击),这是由用户输入一些数据到你的网站,包括客户端脚本(通常就是JavaScript),如果你没有过滤就输入数据到另外一个web网页,这个脚本很可能就会执行。

  它会导致你的网页出现烦人饿弹窗、刷新或者重定向、损坏网页和表单、盗取cookie等等一些列恼人的麻烦,其实这个解决的办法倒是蛮多的,比如PHP提供的有个函数,strip_tags(),这个函数可以清楚包围在HTML标记中的内容,而且strip_tags()函数还允许提供允许标记的列表。另外PHP还提供了另外一个函数htmlspecialchars(),用这个函数过滤再输出到浏览器上面。在这里我就说这两种方法吧,其他的可以网上查询,但是每个函数都是有具体的使用情况的,可能会影响效率,所以童鞋们看看自己的具体情况吧。

3、防止用户操纵变量

  用户拥有有效的密码,并不意味着他将按照规则行事 —— 他有很多机会能够造成损害。例如,应用程序可能允许用户查看特殊的内容。

  比如 template.php?pid=33 或 template.php?pid=321。URL 中问号后面的部分称为查询字符串。因为查询字符串直接放在 URL 中,所以也称为 GET 查询字符串。

  这里的错误看出来了么???

  首先,这里隐含地相信来自浏览器的 GET 变量 pid 是安全的。会导致什么情况发生呢?大多数的用户都会循规蹈矩的继续浏览,不会注意到这个东西,但是这不代表所有人都是这样子的,如果有的人注意到浏览器的 URL 位置域中的 pid=33,就可能开始捣乱。如果他们输入另一个数字,那么可能没问题;但是如果输入别的东西,比如输入 SQL 命令或某个文件的名称(比如 /etc/passwd),或者搞别的恶作剧,比如输入长达 3,000 个字符的数值,那么会发生什么呢?在这种情况下,要记住接班规则,不要信任用户输入。应用程序开发人员知道 template.php 接受的个人标识符(PID)应该是数字,所以可以使用 PHP 的 is_numeric() 函数确保不接受非数字的 PID。需要做的只是使用 strlen() 检查变量的长度是否非零;如果是,就使用一个全数字正则表达式来确保数据元素是有效的。如果 PID 包含字母、斜线、点号或任何与十六进制相似的内容,那么这个例程捕获它并将页面从用户活动中屏蔽。

4、session文件漏洞

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

  从前面的分析可以知道,Session攻击最常见的就是会话劫持,也就是黑客通过各种攻击手段获取用户的Session ID,然后利用被攻击用户的身份来登录相应网站。为此,这里可以用以下几种方法进行防范:一是定期更换Session ID,更换Session ID可以用PHP自带函数来实现;二是更换Session名称,通常情况下Session的默认名称是PHPSESSID,这个变量一般是在cookie中保存的,如果更改了它的名称,就可以阻档黑客的部分攻击;三是对透明化的Session ID进行关闭处理,所谓透明化也就是指在http请求没有使用cookies来制定Session id时,Sessioin id使用链接来传递.关闭透明化Session ID可以通过操作PHP.ini文件来实现;四是通过URL传递隐藏参数,这样可以确保即使黑客获取了session数据,但是由于相关参数是隐藏的,它也很难获得Session ID变量值。

5、跨站点请求伪造(CSRF)

  CSRF攻击,是指一个页面发出的请求,看起来就像是网站的信任用户,但不是故意的。它有许多的变体,接下来,就讲讲我的心得。

  防止跨站点请求伪造:

  一般来说,确保用户来自你的表单,并且匹配每一个你发送出去的表单。有两点一定要记住:
  对用户会话采用适当的安全措施,例如:给每一个会话更新id和用户使用SSL。
  生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它。

6、缓冲区溢出攻击

  缓冲区溢出攻击 试图使 PHP 应用程序中(或者更精确地说,在 Apache 或底层操作系统中)的内存分配缓冲区发生溢出。

  请记住,你可能是使用 PHP 这样的高级语言来编写 Web 应用程序,但是最终还是要调用 C(在 Apache 的情况下)。与大多数低级语言一样,C 对于内存分配有严格的规则。

缓冲区溢出攻击向缓冲区发送大量数据,使部分数据溢出到相邻的内存缓冲区,从而破坏缓冲区或者重写逻辑。这样就能够造成拒绝服务、破坏数据或者在远程服务器上执行恶意代码。
防止缓冲区溢出攻击的惟一方法是检查所有用户输入的长度。

注意,缓冲区溢出攻击并不限于长的数字串或字母串。也可能会看到长的十六进制字符串(往往看起来像 \xA3 或 \xFF)。

记住,任何缓冲区溢出攻击的目的都是淹没特定的缓冲区,并将恶意代码或指令放到下一个缓冲区中,从而破坏数据或执行恶意代码。

对付十六进制缓冲区溢出最简单的方法也是不允许输入超过特定的长度。
如果你处理的是允许在数据库中输入较长条目的表单文本区,那么无法在客户端轻松地限制数据的长度。在数据到达 PHP 之后,可以使用正则表达式清除任何像十六进制的字符串。

  其实说真的,PHP安全性攻击还是蛮多的,我这里也就只是列举了几个常见的攻击方式,其他的就只能百度查询啦!
 

发布了69 篇原创文章 · 获赞 78 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/zalan01408980/article/details/103803792