文章目录

  • 过滤输出
  • 跨站脚本
    • 预防方法
  • SQL 注入
    • 预防方法
  • 转义输出文件名
  • 会话固定
    • 预防方法
  • 文件上传
  • PHP 代码

过滤输出

开发一个 Web 网站要了解的最基本的事情之一是:所有非程序自己生成的信息都有潜在的污染,包括表单数据、文件和数据库。也就是说任何时候我们都不要相信用户输入的数据。

关于过滤的最佳实践:

  • 用白名单的方法。这意味着你宁可谨慎地假设数据都是无效的,除非你能证明它有效。
  • 不要纠正无效的数据。历史证明尝试纠正无效的数据常常会由于错误导致安全漏洞。
  • 使用命名来帮助区分过滤好的和污染的数据。如果你不确定是否过滤了,过滤是无用的。

跨站脚本

跨站脚本(XSS, Cross-site scripting)由于简写 CSS 与层叠样式表重名,而改写成 XSS 。是最常见的网页程序安全漏洞,是注入攻击的一种。其特点是不对服务器造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论,提交含有 JavaScript 的内容的文本。

预防方法

对于任何用户输入的信息,都要进行转义/过滤。

SQL 注入

SQL 注入是将恶意的 SQL 查询或添加语句插入到应用的输出参数中,在由数据库服务器解析执行,从而达到攻击目的。SQL 注入很像 XSS 。

预防方法

  • 使用参数化查询来设计数据访问功能。
  • 转义输出来达到过滤

转义输出文件名

realpath()basename() 来检查文件名。

  • realpath() : 返回规范化的绝对路径名

    chdir('/var/www/'); // 改变目录
    echo realpath('./../../etc/passwd'); // /etc/passwd
    
  • basename() : 返回路径中的文件名部分

这里举一个例子:检查当前传入的参数文件名,是否为规范的文件名(也就是没有 ./ …/ 的文件名)

$filename = $_POST['filename'];
$vetted = basename(realpath($filename));if ($filename !== $vetted){die("{$filename} is not good filename");
}

会话固定

攻击者可以很简单的拿到目标用户的会话标识,进而目标用户使用攻击者的会话标识登录站点,攻击者劫持会话成功.

预防方法

  • 当用户登录的时候重置 sessionID 。
  • sessionID 闲置过久,重置 sessionID 。
  • 当用户权限变更时重置 sessionID 。

文件上传

在文件上传时,不要相信浏览器提供的文件名。正确的方法时:用户交互中用浏览器提供的名字,但是要自己生成唯一的名字用来调用文件。

PHP 代码

我们知道 eval() 函数,可以让脚本执行任意PHP代码。带 /e 选项的 preg_replace() 函数与 eval() 函数效果一样。

以上函数不要使用用户提供的数据,因为这样很容易遭到攻击。

感谢你看到了这里。如果文章有错误,请评论指正,谢谢!

PHP 入门 - 9.安全相关推荐

  1. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  2. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  3. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

  4. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  5. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

  6. SpringBoot (一) :入门篇 Hello World

    什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...

  7. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  8. 5 分钟入门 Google 最强NLP模型:BERT

    BERT (Bidirectional Encoder Representations from Transformers) 10月11日,Google AI Language 发布了论文 BERT: ...

  9. 命名实体识别入门教程(必看)

    关于开发自己的命名实体识别先期思路: 虽然网上有很多相关代码,但实际如何入门材料较少,故整理下: CRF:先期可以用人民日报语料库去做,步骤如下: https://blog.csdn.net/hude ...

  10. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

最新文章

  1. win32汇编定时器简单Demo
  2. 怎么通俗的理解Netty呢?
  3. 应用事件探查器优化SQL Server系统[转]
  4. php字符串对象,PHP字符串到对象名称
  5. 1079. Total Sales of Supply Chain (25)
  6. 前端学习(1747):前端调试值之console用处
  7. 【转载保存】linux shell字符串切割成数组
  8. 使用MariaDB后端在Ubuntu 18.04 / Debian 9上安装PowerDNS和PowerDNS-Admin
  9. 知乎上(知乎上有一个完全错误的回答,下最好的正确评论)非常好的关于mAP,AP等目标检测参数的解释(原来之前我理解错了!!)
  10. Python 爬虫从入门到进阶之路(四)
  11. 图形界面组件实验的一点总结
  12. python读写将excel转换为xml_Python实现将Excel转换成xml的方法示例
  13. C# WinForm拖拽文件+获取exe程序所在目录上上上级目录+复制单个文件并保存+复制某文件夹内文件到另一文件夹
  14. 如何获取html的页面宽度和高度,js获取屏幕,浏览器及网页的宽度和高度
  15. 惠州VOCs实验室建设:日常废气处理工艺
  16. 前端程序员成长的记录及被某IT外包公司套路的经历
  17. 小巧机身 性能强悍 正睿第三代可扩展1U机架式服务器
  18. 两种方法实现轮播图效果
  19. c语言中 三个点 是什么,这是什么…(三个点)在c中意味着什么
  20. 你不知道的前端图片处理(万字长文,建议收藏)

热门文章

  1. python怎么设置代码执行时间_Python 2.x如何设置命令执行的超时时间实例
  2. stata中计算公式命令_stata学习笔记(三):计算五年内的ROA标准差所用到的一些知识...
  3. 大专计算机系毕业课题6000字,计算机理论论文6000字:高校科研.doc
  4. Flask中session和cookies的设置、删除、修改、获取
  5. AjaxJson笔记(1)
  6. python中multiple函数_关于多处理:在Python中将多个参数传递给pool.map()函数
  7. 动态规划之硬币表示问题
  8. 特征分解与奇异值分解
  9. Android网络连接的两种方法:apache client和httpurlconnection的比较
  10. 把十进制转化为二进制的一种方法