你的 PHP/Laravel 网站是否足够安全?(PHPer 安全须知)

file

下面一系列的漏洞都可以对PHP或Laravel框架写的站点造成威胁。有一些广为人知、攻击手段简单,所以很容易被利用来进行攻击。有一些漏洞需要特别关注,避免在你的站点出现。

1. SQL 注入

SQL注入可能是最知名且常见的漏洞了。
说白了,它允许攻击者将SQL语句注入到你未经处理的代码中。
如果你的代码像以下这样:

$post_id = $_POST['post_id'];
$sql = "DELETE FROM posts WHERE user_id = 1 AND id = $post_id";
\DB::statement($sql);

如果有人在提交 post_id 时输入 1 OR 1 ,你的语句会组合成这样:

$sql = "DELETE FROM posts WHERE user_id = 1 AND id = 1 OR 1";

最终你的语句执行起来就是:删除所有用户的所有帖子!

2. XSS (跨站脚本攻击)

跨站脚本攻击与 SQL 注入类似。它允许注入 HTML / JavaScript 代码到你的 HTML 页面中 。

想像一下类似 Google 这样的页面,用户可以在其中输入搜索查询。
在结果页面上,您将显示他们正在搜索的内容:

<?php echo 'You searched for: ' . $_GET['search_query']; ?>

如果攻击者会输入这样的内容:

<script>alert('surprise!');</script>

JavaScript 代码将被浏览器执行,用户会看到弹出窗口 “surprise!” 。

攻击者可以做些什么呢,可以窃取 cookies ,重定向用户到其他网站,窃取密码。什么,你的密码是 123456 ?

3. CSRF (跨站请求伪造)

例如在你的网站上有用户可以用来删除账户的链接。

<a href="http://your-website.com/delete-account">delete account</a>

猜测以下如果攻击者提交一个如下这样的评论会发生什么:

<img src=”http://your-website.com/delete-account”> lol :D

用户将在查看此评论的时候删除他们的账号。 让我们继续发表评论!

4. 点击劫持

这种攻击类型试图让你点击你不想要的地方。例如通过在其他按钮顶部放置不可见的 Facebook like 按钮。

另一个例子是在 <iframe> 中打开 Facebook ,并将这个 iframe 放置在 JavaScript 代码中,所以无论何时你点击某个地方,你总是会点击到 Facebook 页面上的分享按钮。

查看示例

你也喜欢这个例子吗?

5. 上传文件到 public_html

这种攻击形式是,攻击者上传 .php 文件或者其他可执行文件到你的 public_html 目录。.

想象一下如果你的网站有图片上传功能,同时没有检测上传文件的类型。我仿佛看见一场上传风暴扑面而来...

6. ZIP 炸弹

一些网站允许用户上传 .zip 文档,然后进行解压缩和再处理。但这里存在一个大问题。

很有可能这个 .zip 文档大小仅有 42 KB,但在解压后会占用 4718592 GB 的空间。你可以把它想象成一颗原子弹。

样例文件

7. file_get_contents()

使用这个函数可以轻松的读取文件内容:

echo file_get_contents('https://some-website.com/friend-list.txt');

但是你如果让攻击者输入他想要的,他可以从你服务器进入的文件,例如:

echo file_get_contents('.env');
OR
echo file_get_contents('secret-code.php');

这个函数将会从你的服务器读取文件和展示内容给攻击者。

这个漏洞是很难找到的,就像皮卡丘在宠物小精灵之中一样难找。

总结

想要在这场漏洞之战中赢得胜利,最好的方法就是深入了解它们。

想要知道你的站点是否成功防止了这些漏洞吗?如果是,可以提交你的站点地址,有人会帮你检查。


Practice makes perfect.

原文地址:https://medium.com/@mantasd/is-your-php-...

译文地址:https://learnku.com/laravel/t/7712/is-yo...

本帖已被设为精华帖!
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 15

然后一个敢留下的都没有:unamused:

1年前 评论

来几个留下网站的,让我们测试测试

1年前 评论

https://www.cocoyo.xin当小白鼠,请不要删库:smile:

1年前 评论

@happygeek 你的注册有 问题啊,(该网页无法正常运作),邮箱不严格

1年前 评论

我要看下宠物小精灵 皮卡丘 是多少级出来的。

1年前 评论

@happygeek 库已删除,请恢复。

1年前 评论

https://3kmq.com 同当小白鼠,请不要删库

1年前 评论
kenuo

blog.pengfuxiao.cn 同当小白鼠,请不要删库

1年前 评论

@ThinkWorld 吓得我赶紧打开看看

1年前 评论

所以说的zip炸弹究竟如何防止呢?google了半天也没看到一个方案

1年前 评论

如果用 Laravel 的话……

SQL 注入 => ORM 应该使用了预处理语句(吧?)

XSS => Blade 模版的 {{ }} 语法会自动转义

CSRF => 自带 CSRF Token 中间件

可见我大 Laravel 还是很牛逼的,hhh

1年前 评论

ZIP 的怎么防护?解压时限制大小?

1年前 评论

@mr ROM的预处理语言是不够的 再来一个mysql_real_escape_string,看看这里面的处理方式呀;博客:[译] 2018 PHP 应用程序安全设计指北

1年前 评论
雪风

zip炸弹这个,我真是跪了,一个42KB的文件,全解压应该没有哪个服务器能装下来吧。

11个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会