SQL注入

SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。

防范方式

  • 使用mysql_real_escape_string(),或者addslashes()过滤数据
  • 手动检查每一数据是否为正确的数据类型
  • 使用预处理语句并绑定变量
  • 使用准备好的预处理语句
  • 分离数据和SQL逻辑
  • 预处理语句将自动过滤(如:转义)
  • 把它作为一个编码规范,可以帮助团队里的新人避免遇到以上问题
相比于直接执行SQL语句,预处理语句有两个主要优点
  • 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
  • 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
  • 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
而在PHP当中,使用预处理语句主要有两种方法
  • 使用mysqli数据库
  • 使用PDOStatement类对象

查询只需要被解析(或准备)一次,但可以使用相同或不同的参数执行多次。当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要执行查询的计划。对于复杂查询来说,如果你要重复执行许多次有不同参数的但结构相同的查询,这个过程会占用大量的时间,使得你的应用变慢。通过使用一个预处理语句你就可以避免重复分析、编译、优化的环节。简单来说,预处理语句使用更少的资源,执行速度也就更快。

服务器的措施
  • 关于SQL注入,不得不说的是现在大多虚拟主机都会把magic_quotes_gpc选项打开,在这种情况下所有的客户端GET和POST的数据都会自动进行addslashes处理,所以此时对字符串值的SQL注入是不可行的,但要防止对数字值的SQL注入,如用intval()等函数进行处理。但如果你编写的是通用软件,则需要读取服务器的magic_quotes_gpc后进行相应处理。

XSS攻击

XSS(跨站点脚本攻击)是一种攻击,由用户输入一些数据到你的网站,其中包括客户端脚本(通常JavaScript)。如果你没有过滤就输出数据到另一个web页面,这个脚本将被执行。

防范方式

是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数 。

在使用htmlspecialchars()函数的时候注意第二个参数, 直接用htmlspecialchars($string) 的话,第二个参数默认是ENT_COMPAT,函数默认只是转化双引号(“), 不对单引号(‘)做转义.

所以,htmlspecialchars函数更多的时候要加上第二个参数, 应该这样用: htmlspecialchars($string,ENT_QUOTES).当然,如果需要不转化如何的引号,用htmlspecialchars($string,ENT_NOQUOTES).

另外, 尽量少用htmlentities, 在全部英文的时候htmlentities和htmlspecialchars没有区别,都可以达到目的.但是,中文情况下, htmlentities却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。

htmlentities和htmlspecialchars这两个函数对 '之类的字符串支持不好,都不能转化, 所以用htmlentities和htmlspecialchars转化的字符串只能防止XSS攻击,不能防止SQL注入攻击.

代码注入

代码注入是利用计算机漏洞通过处理无效数据造成的。问题出在,当你不小心执行任意代码,通常通过文件包含。写得很糟糕的代码可以允许一个远程文件包含并执行。如许多PHP函数,如require可以包含URL或文件名

防范方式

  • 过滤用户输入
  • 在php.ini中设置禁用allow_url_fopen和allow_url_include。这将禁用require/include/fopen的远程文件。

文章参考:
https://blog.csdn.net/tim_php...
https://blog.csdn.net/come_on...
https://www.cnblogs.com/wt645...

原文地址:https://segmentfault.com/a/1190000016915271

最新文章

  1. iOS--使用UIImageView进行GIF动图播放
  2. Atitit oodbms的查询,面向对象的sql查询jpa jpql hql
  3. linux tar命令
  4. Form_Form Builder编译fmb/library/menu方式总结(汇总)
  5. ntdll.dll函数原型
  6. VS2012生成不依赖运行时不依赖MFC的MFC程序
  7. 使用dreamever去掉文件头部BOM(bom)信息 From 百度经验
  8. Windows二进制文件的Python扩展包
  9. Jenkins获取git tags代码
  10. 框架篇:Spring+SpringMVC+Mybatis整合开发
  11. 【php】php 连接数据库
  12. java非阻塞NIO和阻塞IO
  13. ES5与ES6中的继承
  14. GitHub Desktop的简单使用
  15. 阿里ARouter使用及源码解析(一)
  16. 前端小菜鸡使用Vue+Element笔记(二)
  17. VNC远程连接阿里云Linux服务器 图形界面
  18. intellij idea强制更新索引
  19. 详细介绍Base64的编码转换方式
  20. MSMQ-发送消息到远程专用队列path格式

热门文章

  1. bat脚本启动exe并打开文件后退出 + 中文乱码
  2. 【Java】新建的web项目的jsp页面报错的解决方法
  3. 获取新浪微博的Access_token
  4. Optional Chaining as an Alternative to Forced Unwrapping
  5. continue和break
  6. 【BZOJ4448】【SCOI2015】情报传递
  7. 51nod 麦克打电话(AC自动机+树状数组)
  8. POJ 1821 Fence(单调队列优化DP)
  9. 一句话木马和中国菜刀的结合拿webshell
  10. 特斯拉正加快部署第三代Autopilot自动驾驶计算机