PHP防止SQL注入和XSS攻击
PHP防范SQL注入是一个非常重要的安全手段。一个优秀的PHP程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力。

说到网站安全,就不得不提到SQL注入(SQL Injection),如果你用过ASP,那么对SQL注入一定有比较深的理解。

PHP的安全性相对较高,这是因为MYSQL4以下的版本不支持子语句,而且当php.ini里的 magic_quotes_gpc 为On 时,提交的变量中所有的 ‘ (单引号), ” (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的转义字符,给SQL注入带来不少的麻烦。

请看清楚:“麻烦”而已,这并不意味着PHP防范SQL注入。书中就讲到了利用改变注入语句的编码来绕过转义的方法,比如将SQL语句转成ASCII编码(类似:char(100,58,92,108,111,99,97,108,104,111,115,116…)这样的格式),或者转成16进制编码,甚至还有其他形式

的编码,这样以来,转义过滤便被绕过去了。

那么,怎样防范SQL注入呢?
 
a. 打开magic_quotes_gpc或使用addslashes()函数

在新版本的PHP中,就算magic_quotes_gpc打开了,再使用addslashes()函数,也不会有冲突,但是为了更好的实现版本兼容,建议在使用转移函数前先检测magic_quotes_gpc状态,或者直接关掉,代码如下:

// PHP 防范SQL注入的代码 //
// 去除转义字符   
function stripslashes_array($array) {   
  if (is_array($array)) {   
    foreach ($array as $k => $v) {   
      $array[$k] = stripslashes_array($v);   
    }   
  } else if (is_string($array)) {   
    $array = stripslashes($array);   
  }   
  return $array;   
}   
@set_magic_quotes_runtime(0);   
// 判断 magic_quotes_gpc 状态   
if (@get_magic_quotes_gpc()) {   
  $_GET = stripslashes_array($_GET);   
  $_POST = stripslashes_array($_POST);   
  $_COOKIE = stripslashes_array($_COOKIE);   
}
// PHP 防范SQL注入的代码 //

去除magic_quotes_gpc的转义之后再使用addslashes函数,代码如下:

$keywords = addslashes($keywords);

$keywords = str_replace(“_”,”\_”,$keywords);//转义掉”_”

$keywords = str_replace(“%”,”\%”,$keywords);//转义掉”%”

后两个str_replace替换转义目的是防止黑客转换SQL编码进行攻击。
 
——————————————————

b. 强制字符格式(类型)

在很多时候我们要用到类似xxx.php?id=xxx这样的URL,一般来说$id都是整型变量,为了防范攻击者把$id篡改成攻击语句,我们要尽量强制变量,代码如下:

// PHP防范SQL注入的代码 //

$id=intval($_GET[‘id’]);

当然,还有其他的变量类型,如果有必要的话尽量强制一下格式。
 
——————————————————

c. SQL语句中包含变量加引号

这一点儿很简单,但也容易养成习惯,先来看看这两条SQL语句:

SELECT * FROM article WHERE articleid=’$id’

SELECT * FROM article WHERE articleid=$id

两种写法在各种程序中都很普遍,但安全性是不同的,第一句由于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了正确的SQL语句,也不会正常执行。

而第二句不同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为SQL语句执行。因此,我们要养成给SQL语句中变量加引号的习惯。
 
——————————————————

d. URL伪静态化

URL伪静态化也就是URL重写技术,像Discuz!一样,将所有的URL都rewrite成类似xxx-xxx-x.html格式,既有利于SEO,又达到了一定的安全性,也不失为一个好办法。但要想实现PHP防范SQL注入,前提是你得有一定的“正则”基础。
——————————————————

此外,PHP所有打印的语句如echo,print等,在打印前都要使用htmlentities() 进行过滤,这样可以防止Xss。

注意中文要写出htmlentities($name, ENT_NOQUOTES, GB2312)

mysql_real_escape_string() 。

所以SQL语句如果有类似这样的写法:“select * from cdr where src =”.$userId,

都要改成$userId=mysql_real_escape_string($userId) 。

以上,就是PHP防止SQL注入和XSS攻击的方法及源码。

————————————————————————————————————

————————————————————————————————————

————————————————————————————————————

慕课网实战教程

后端:

1、java c++算法与数据结构
2、java Spring Boot带前后端 渐进式开发企业级博客系统
3、java Spring Boot企业微信点餐系统
4、java Spring Security开发安全的REST服务
5、Java Spring带前后端开发完整电商平台
6、Java SSM开发大众点评后端
7、Java SSM快速开发仿慕课网在线教育平台
8、Java 大牛 带你从0到上线开发企业级电商项目
9、Java 开发企业级权限管理系统
10、Java 校招面试 Google面试官亲授
11、Python Flask 构建微电影视频网站
12、Python3 全网最热的Python3入门+进阶 比自学更快上手实际开发
13、Python操作三大主流数据库
14、Python分布式爬虫打造搜索引擎
15、Python高效编程技巧实战
16、PHP 360大牛全面解读PHP面试
17、PHP Thinkphp 5.0 仿百度糯米开发多商家电商平台
18、PHP thinkphp实战开发企业站
19、PHP 高性能 高价值的PHP API接口
20、PHP+Ajax+jQuery网站开发项目式教程
21、PHP7+WEB+Mysql+thinkphp+laravel
22、PHP开发高可用高安全app后端
23、PHP秒杀系统-高并发高性能的极致挑战(完整版)
24、PHP入门:基础语法到实际运用
25、前端到后台ThinkPHP开发整站
26、微信小程序 ThinkPHP5.0+小程序商城构建全栈应用
27、微信小程序入门与实战 常用组件 API 开发技巧 项目实战
28、Laravel5.4快速开发简书网站
29、Yii 2.0进阶版 高级组件 ES + Redis + Sentry 优化京东平台
30、Yii 2.0开发一个仿京东商城平台

前端:

1、前端 所向披靡的响应式开发
2、前端小白入门课程
3、Javascript 让你页面速度飞起来 - Web前端性能优化
4、JavaScript 面试技巧全套
5、对接真实数据 从0开发前后端分离企业级上线项目
6、前端跳槽面试必备技巧
7、腾讯大牛教你web前后端漏洞分析与防御
8、响应式开发一招致胜
9、前端 强力Django+杀手级Xadmin打造上线标准的在线教育平台
10、全网稀缺Vue 2.0高级实战 独立开发专属音乐WebAPP
11、Vue+Django REST framework 打造生鲜电商项目
12、Vue.js高仿饿了么外卖App 前端框架Vue.js 1.0升级2.0
13、Vue2.0+Node.js+MongoDB 打造商城系统
14、vue2.0带你入门Vue 2.0及案例开发
15、Vue、Node、MongoDB高级技术栈全覆盖
16、WebApp用组件方式开发全站
17、WebApp书城开发
18、组件方式开发 Web App全站

数据库:

1、MySQL性能管理及架构设计
2、高性能MySql 可扩展MySQL数据库设计及架构优化 电商项目

移动端:

1、Android常用框架教程Retrofit2 OKhttp3 Dagger2 RxJava2
2、Android通用框架设计与完整电商APP开发
3、Android应用发展趋势必备武器 热修复与插件化
4、Android专项测试-Python篇
5、Android自动化测试-java篇
6、Kotlin系统入门与进阶
7、带领新手快速开发Android App完整版
8、基于okhttp 3 的 Android 网络层架构设计实战
9、零基础入门安卓与界面
10、React native 快速开发轻量级App
11、React Native开发跨平台Github App
12、贯穿全栈React Native开发App

赠送:

1、Nginx 企业级刚需Nginx入门
2、机器学习入门 Scikit-learn实现经典小案例
3、10小时入门大数据
4、ionic2飞速上手的跨平台App开发
5、Sass 基础教程
6、互联网架构原版不加密
7、看得见的算法 7个经典应用诠释算法精髓
8、玩转算法面试 leetcode

详情扣扣   759104513

PHP防止SQL注入和XSS攻击的更多相关文章

  1. yii框架各种防止sql注入,xss攻击,csrf攻击

    PHP中常用到的方法有: /*  防sql注入,xss攻击  (1)*/    function actionClean($str)    {        $str=trim($str);      ...

  2. 防止sql注入。xss攻击 方法

    //防止sql注入.xss攻击    /**     * 过滤参数     * @param string $str 接受的参数     * @return string     */    publ ...

  3. 防止SQL注入和XSS攻击Filter

    nbsp;今天系统使用IBM的安全漏洞扫描工具扫描出一堆漏洞,下面的filter主要是解决防止SQL注入和XSS攻击 一个是Filter负责将请求的request包装一下. 一个是request包装器 ...

  4. SQL 注入、XSS 攻击、CSRF 攻击

    SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参 ...

  5. Nginx 防止SQL注入、XSS攻击的实践配置方法

    下班的时候,发现博客访问缓慢,甚至出现504错误,通过 top -i 命令查看服务器负载发现负载数值飙升到3.2之多了,并且持续时间越来越频繁直至持续升高的趋势,还以为是被攻击了,对来访IP进行了阈值 ...

  6. SQL注入和XSS攻击

    SQL注入 定义:黑客通过在请求的数据中填入特殊字符,影响服务器数据库操作程序正常执行,从而达到攻击的目的. 形式: 拼接SQL: 登录验证:前台输入 username:yan password:12 ...

  7. Node.js 项目中解决 SQL 注入和 XSS 攻击

    1.SQL 注入 SQL 注入,一般是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令. SQL 注入示例 在登录界面,后端会根 ...

  8. 解决 SQL 注入和 XSS 攻击(Node.js 项目中)

    1.SQL 注入 SQL 注入,一般是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令. SQL 注入示例 在登录界面,后端会根 ...

  9. 跨域、sql注入、xss攻击

    这几天遇到这三个问题,现在简单的记录下来. 1.跨域 如我服务器的域名是www.test1.com,我在另一个服务器www.test2.com通过ajax访问www.test1.com的数据时,就引起 ...

随机推荐

  1. python分布式环境下的限流器

    项目中用到了限流,受限于一些实现方式上的东西,手撕了一个简单的服务端限流器. 服务端限流和客户端限流的区别,简单来说就是: 1)服务端限流 对接口请求进行限流,限制的是单位时间内请求的数量,目的是通过 ...

  2. AsyncTask学习

    在学习Android的时候,开始用到比较多的异步处理的类大概就是AsyncTask,但是我们很多时候只知道调用,却不知道思考一些东西. 本文就简单的总结和分析了一些AsyncTask的知识. 一.As ...

  3. Android插件化-RePlugin项目集成与使用

    前言:前一段时间新开源了一种全面插件化的方案-- RePlugin,之前一种都在关注 DroidPlugin 并且很早也在项目中试用了,但最终没有投入到真正的生产环节,一方面是项目中没有特别需要插件化 ...

  4. Java基础笔记7

    OOP面向对象有三个特点 1.封装 封装的好处: 起到一定的保护作用  封装的是属性. java如何进行封装; 1.使用private关键字对象属性封装. 只能在本类中使用.  2.为每个属性提供方法 ...

  5. 使用weinre远程调试

    1.调试环境: 1)使用nodejs搭建调试服务器: 先安装node,然后使用npm安装weinre,在node.js安装目录输入以下命令 npm install weinre 2)需要wifi环境和 ...

  6. WPF TextBox按字节长度限制输入

    前两天做一个项目的时候,由于页面没有限制TextBox的输入长度,所以,后台直接报错了,超出数据库最大的长度. 数据库的长度是按照字节来计算的,而且不同的编码格式,汉字占用的字节长度又不相同,比如,我 ...

  7. [Intel Edison开发板] 06、Edison开发在linux中烧写、配置、搭建开发环境

    1.前言 linux上烧写.配置.搭建Edison环境,千万不要用默认的setup tool for ubuntu!!! (即使,你用的就是ubuntu) 因为,其默认的工具会从一个坏链接下载配置文件 ...

  8. 数据库中float类型字段,转化到前端显示,统一保留两位小数

    客户的一个需求,mybatis查询到的数据库的数据进行转换,采用TypeHandler<T>的方式.float保留两位精度可以采用DecimalFormat 直接贴上最终的解决代码(事情没 ...

  9. Spring IOC容器分析(4) -- bean创建获取完整流程

    上节探讨了Spring IOC容器中getBean方法,下面我们将自行编写测试用例,深入跟踪分析bean对象创建过程. 测试环境创建 测试示例代码如下: package org.springframe ...

  10. C#内部关于绑定事件Event的线程安全

    private EventHandler _FieldsChanged;public event EventHandler FieldsChanged{    add    {        Even ...