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. Numpy的小总结

    1.Numpy是什么? numpy是Python的一个科学计算库,提供矩阵运算的功能. 1.1Numpy的导入 import numpy as np #一般都是用numpy的别名来进行操作 1.2Nu ...

  2. ASP.NET MVC 分页问题

    在使用Ajax.Pager进行分页的时候需要注意一下几个方面: 1.一定要引入jquery.unobtrusive-ajax.min.js这个js: 2.一定要在页面中使用注册分页器,注册方法:@{H ...

  3. 树莓派.GPRS.短信接收器

    起因 曾经用过西门子出的短信猫, 好处是直接有SDK开发包, 不会硬件开发也能直接使用 缺点也是明显的, 就是只支持Windows系统, 另外就是在Windows下工作很不稳定, 隔开几天就会出现收不 ...

  4. LeetCode 495. Teemo Attacking (提莫攻击)

    In LOL world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned ...

  5. C# 8.0的三个令人兴奋的新特性

    C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新.同时,C# 每个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高 ...

  6. SEO诊断之关于网站收录(转)

    如何让网站被搜索引擎收录?我的网站有收录无排名怎么办?这些网站收录问题估计是seo最应关心的根本问题之一,网站收录都没有何来排名?我整理了每天咨询最多最具代表性的 8 个关于网站收录的问题及其答案统一 ...

  7. Java就业企业面试问题-ssh框架

    SSH框架阶段SSH的优缺点,使用场景?   Hibernate优点:   (1) 对象/关系数据库映射(ORM) 它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想 ...

  8. linux学习(二)linux配置网卡以及常见网络问题排查

    实验环境环境:mac,vmware fusion 一.常用的虚拟机网络连接模式. NAT:推荐方式.它可以使你在切换网络环境(比如在工作中和家里)时,不需要修改虚拟主机的配置,而维持正常的上网功能. ...

  9. Problem V

    Problem Description The aspiring Roy the Robber has seen a lot of American movies, and knows that th ...

  10. rsync 服务部署详解

    第1章 rsync 软件介绍 1.1 什么是rsync rsync 是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具. http://www.samba.org/ft ...