6个常见的 PHP 安全性攻击实例和阻止方法


Posted in PHP onDecember 16, 2020

了解常见的PHP应用程序安全威胁,可以确保你的PHP应用程序不受攻击。因此,本文将列出 6个常见的 PHP 安全性攻击,欢迎大家来阅读和学习。

1、SQL注入

SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。还有一种是通过system()或exec()命令注入的,它具有相同的SQL注入机制,但只针对shell命令。

$username = $_POST['username'];
$query = "select * from auth where username = '".$username."'";
echo $query;
$db = new mysqli('localhost', 'demo', ‘demo', ‘demodemo');
$result = $db->query($query);
if ($result && $result->num_rows) {
    echo "<br />Logged in successfully";
} else {
    echo "<br />Login failed";
}

上面的代码,在第一行没有过滤或转义用户输入的值($_POST['username'])。因此查询可能会失败,甚至会损坏数据库,这要看$username是否包含变换你的SQL语句到别的东西上。

防止SQL注入

选项:

使用mysql_real_escape_string()过滤数据

手动检查每一数据是否为正确的数据类型

使用预处理语句并绑定变量

使用准备好的预处理语句

分离数据和SQL逻辑

预处理语句将自动过滤(如:转义)

把它作为一个编码规范,可以帮助团队里的新人避免遇到以上问题。

$query = 'select name, district from city where countrycode=?';
if ($stmt = $db->prepare($query) )
{
    $countrycode = 'hk';
    $stmt->bind_param("s", $countrycode);
    $stmt->execute();
    $stmt->bind_result($name, $district);
    while ( $stmt ($stmt->fetch() ){
        echo $name.', '.$district;
        echo '<br />';
    }
    $stmt->close();
}

2、XSS攻击

XSS(跨站点脚本攻击)是一种攻击,由用户输入一些数据到你的网站,其中包括客户端脚本(通常JavaScript)。如果你没有过滤就输出数据到另一个web页面,这个脚本将被执行。

接收用户提交的文本内容

<?php
if (file_exists('comments')) {
    $comments = get_saved_contents_from_file('comments');
} else {
    $comments = '';
}

if (isset($_POST['comment'])) {
    $comments .= '<br />' . $_POST['comment'];
    save_contents_to_file('comments', $comments);
}
>

输出内容给(另一个)用户

<form action='xss.php' method='POST'>
Enter your comments here: <br />
<textarea name='comment'></textarea> <br />
<input type='submit' value='Post comment' />
</form><hr /><br />

<?php echo $comments; ?>

将会发生什么事?

烦人的弹窗

刷新或重定向

损坏网页或表单

窃取cookie

AJAX(XMLHttpRequest)

防止XSS攻击

为了防止XSS攻击,使用PHP的htmlentities()函数过滤再输出到浏览器。htmlentities()的基本用法很简单,但也有许多高级的控制,请参阅XSS速查表。

3、会话固定

会话安全,假设一个PHPSESSID很难猜测。然而,PHP可以接受一个会话ID通过一个Cookie或者URL。因此,欺骗一个受害者可以使用一个特定的(或其他的)会话ID 或者钓鱼攻击。

6个常见的 PHP 安全性攻击实例和阻止方法

4、会议捕获和劫持

这是与会话固定有着同样的想法,然而,它涉及窃取会话ID。如果会话ID存储在Cookie中,攻击者可以通过XSS和JavaScript窃取。如果会话ID包含在URL上,也可以通过嗅探或者从代理服务器那获得。

防止会话捕获和劫持

更新ID

如果使用会话,请确保用户使用SSL

5、跨站点请求伪造(CSRF)

CSRF攻击,是指一个页面发出的请求,看起来就像是网站的信任用户,但不是故意的。它有许多的变体,比如下面的例子:

<img src='http://example.com/single_click_to_buy.php?user_id=123&item=12345'>

防止跨站点请求伪造

一般来说,确保用户来自你的表单,并且匹配每一个你发送出去的表单。有两点一定要记住:

对用户会话采用适当的安全措施,例如:给每一个会话更新id和用户使用SSL。

生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它。

6、代码注入

代码注入是利用计算机漏洞通过处理无效数据造成的。问题出在,当你不小心执行任意代码,通常通过文件包含。写得很糟糕的代码可以允许一个远程文件包含并执行。如许多PHP函数,如require可以包含URL或文件名,例如:

<form>Choose theme:
    <select name = theme>
        <option value = blue>Blue</option>
        <option value = green>Green</option>
        <option value = red>Red</option>
    </select>
    <input type = submit>
</form>
<?php
    if($theme) {
        require($theme.'.txt');
    }
?>

在上面的例子中,通过传递用户输入的一个文件名或文件名的一部分,来包含以"http://"开头的文件。

防止代码注入

过滤用户输入

在php.ini中设置禁用allow_url_fopen和allow_url_include。这将禁用require/include/fopen的远程文件。

其他的一般原则

1. 不要依赖服务器配置来保护你的应用,特别是当你的web服务器/ PHP是由你的ISP管理,或者当你的网站可能迁移/部署到别处,未来再从别处迁移/部署在到其他地方。请在网站代码中嵌入带有安全意识的检查/逻辑(HTML、JavaScript、PHP,等等)。

2. 设计服务器端的安全脚本:

—例如,使用单行执行 - 单点身份验证和数据清理

—例如,在所有的安全敏感页面嵌入一个PHP函数/文件,用来处理所有登录/安全性逻辑检查

3. 确保你的代码更新,并打上最新补丁。

到此这篇关于6个常见的 PHP 安全性攻击实例和阻止方法的文章就介绍到这了,更多相关PHP安全性攻击内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
php preg_match_all结合str_replace替换内容中所有img
Oct 11 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
php调用mysql数据 dbclass类
May 07 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
Laravel5.1 框架响应基本用法实例分析
Jan 04 PHP
TP5多入口设置实例讲解
Dec 15 #PHP
Mac系统下搭建Nginx+php-fpm实例讲解
Dec 15 #PHP
php在linux环境中如何使用redis详解
Dec 15 #PHP
PHP文件操作简单介绍及函数汇总
Dec 11 #PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 #PHP
PHP生成随机密码4种方法及性能对比
Dec 11 #PHP
通过代码实例解析PHP session工作原理
Dec 11 #PHP
You might like
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
简单解析Django框架中的表单验证
2015/07/17 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
scrapy爬虫完整实例
2018/01/25 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
商务英语专业自荐信
2013/10/14 职场文书
触电现场处置方案
2014/05/14 职场文书
农民工工资承诺书大全
2015/05/04 职场文书
技术入股协议书
2016/03/22 职场文书
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
PHP中多字节字符串操作实例详解
2021/08/23 PHP
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL
Python之matplotlib绘制折线图
2022/04/13 Python