PHP防止SQL注入和XSS攻击
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攻击的更多相关文章
- yii框架各种防止sql注入,xss攻击,csrf攻击
PHP中常用到的方法有: /* 防sql注入,xss攻击 (1)*/ function actionClean($str) { $str=trim($str); ...
- 防止sql注入。xss攻击 方法
//防止sql注入.xss攻击 /** * 过滤参数 * @param string $str 接受的参数 * @return string */ publ ...
- 防止SQL注入和XSS攻击Filter
nbsp;今天系统使用IBM的安全漏洞扫描工具扫描出一堆漏洞,下面的filter主要是解决防止SQL注入和XSS攻击 一个是Filter负责将请求的request包装一下. 一个是request包装器 ...
- SQL 注入、XSS 攻击、CSRF 攻击
SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参 ...
- Nginx 防止SQL注入、XSS攻击的实践配置方法
下班的时候,发现博客访问缓慢,甚至出现504错误,通过 top -i 命令查看服务器负载发现负载数值飙升到3.2之多了,并且持续时间越来越频繁直至持续升高的趋势,还以为是被攻击了,对来访IP进行了阈值 ...
- SQL注入和XSS攻击
SQL注入 定义:黑客通过在请求的数据中填入特殊字符,影响服务器数据库操作程序正常执行,从而达到攻击的目的. 形式: 拼接SQL: 登录验证:前台输入 username:yan password:12 ...
- Node.js 项目中解决 SQL 注入和 XSS 攻击
1.SQL 注入 SQL 注入,一般是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令. SQL 注入示例 在登录界面,后端会根 ...
- 解决 SQL 注入和 XSS 攻击(Node.js 项目中)
1.SQL 注入 SQL 注入,一般是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令. SQL 注入示例 在登录界面,后端会根 ...
- 跨域、sql注入、xss攻击
这几天遇到这三个问题,现在简单的记录下来. 1.跨域 如我服务器的域名是www.test1.com,我在另一个服务器www.test2.com通过ajax访问www.test1.com的数据时,就引起 ...
随机推荐
- Numpy的小总结
1.Numpy是什么? numpy是Python的一个科学计算库,提供矩阵运算的功能. 1.1Numpy的导入 import numpy as np #一般都是用numpy的别名来进行操作 1.2Nu ...
- ASP.NET MVC 分页问题
在使用Ajax.Pager进行分页的时候需要注意一下几个方面: 1.一定要引入jquery.unobtrusive-ajax.min.js这个js: 2.一定要在页面中使用注册分页器,注册方法:@{H ...
- 树莓派.GPRS.短信接收器
起因 曾经用过西门子出的短信猫, 好处是直接有SDK开发包, 不会硬件开发也能直接使用 缺点也是明显的, 就是只支持Windows系统, 另外就是在Windows下工作很不稳定, 隔开几天就会出现收不 ...
- LeetCode 495. Teemo Attacking (提莫攻击)
In LOL world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned ...
- C# 8.0的三个令人兴奋的新特性
C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新.同时,C# 每个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高 ...
- SEO诊断之关于网站收录(转)
如何让网站被搜索引擎收录?我的网站有收录无排名怎么办?这些网站收录问题估计是seo最应关心的根本问题之一,网站收录都没有何来排名?我整理了每天咨询最多最具代表性的 8 个关于网站收录的问题及其答案统一 ...
- Java就业企业面试问题-ssh框架
SSH框架阶段SSH的优缺点,使用场景? Hibernate优点: (1) 对象/关系数据库映射(ORM) 它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想 ...
- linux学习(二)linux配置网卡以及常见网络问题排查
实验环境环境:mac,vmware fusion 一.常用的虚拟机网络连接模式. NAT:推荐方式.它可以使你在切换网络环境(比如在工作中和家里)时,不需要修改虚拟主机的配置,而维持正常的上网功能. ...
- Problem V
Problem Description The aspiring Roy the Robber has seen a lot of American movies, and knows that th ...
- rsync 服务部署详解
第1章 rsync 软件介绍 1.1 什么是rsync rsync 是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具. http://www.samba.org/ft ...