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的数据时,就引起 ...
随机推荐
- Ubuntu系统下的实用软件推荐
想要在ubuntu下工作? 又担心影响效率? 这些软件可以帮助你解决问题 ! 基本在windows上可以做到的功能, 在linux中也同样能够实现,而且自己寻找解决方案的过程才是最有趣的! 1.gua ...
- SpringMVC 配置
1.在WEB-INF\web.xml中定义前端控制器 <servlet> <servlet-name>springmvc</servlet-name> <se ...
- oracle赋值问题(将同一表中某一字段赋值给另外一个字段的语句)
将同一表中某一字段赋值给另外一个字段的语句update jxc_ckmx ckmx1 set ckmx1.ddsl = (select ckmx2.sl from jxc_ckmx ckmx2 whe ...
- JPA的一对多映射(双向)关联
实体Customer:用户. 实体Order:订单. Customer和Order是一对多关系.那么在JPA中,如何表示一对多的双向关联呢? JPA使用@OneToMany和@ManyToOne来标识 ...
- Ionic3 遇到的一些错误- Error: Your isarray platform does not have Api.js
执行:ionic cordova resources android --icon -i 生成应用图标时,出现下面的错误: 尝试解决方案: 删掉整个项目,重新创建,竟然好了....
- ajax+php(环境搭建+测试)
在学习JavaScript,jQuery的ajax部分的时候,一直不明白要如何进行,不知道服务器要怎么弄,什么都不知道,当初在学ajax的时候,除了看一下ajax的内容,实践极少,因为,不知道要怎么做 ...
- 多项式求和,素数判定 HDU2011.2012
HDU 2011:多项式求和 Description 多项式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 现在请你求出该多项式的前n项的和. Input ...
- input 密码框调出手机的数字键盘
对于某些密码,想要在手机上调出数字键盘,同时要隐藏文字.可结合type=tel和 text-security属性达到目的. input{ -webkit-text-security:disc; tex ...
- RPC 调用简述
首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网 ...
- 搭建本地Tomcat
1.下载自己需要的版本我安装的Tomcat8(https://tomcat.apache.org/). 2.根据自己的电脑下载需要的系统版本.我的电脑是Windows64位的操作系统 3.选择一个目录 ...