北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

Thinkphp5.0极速搭建restful风格接口层

下面是基于ThinkPHP V5.0 RC4框架,以restful风格完成的新闻查询(get)、新闻增加(post)、新闻修改(put)、新闻删除(delete)等server接口层。

1、下载ThinkPHP V5.0 RC4版本;

2、配置虚拟域名(非必须,只是为了方便);

Apache\conf\extra\httpd-vhosts.conf

FCKeditor上传漏洞的总结分析(fckeditor上传漏洞的总结分析是什么)

0x01 FCKeditor简介

FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化,不需要太复杂的安装步骤即可使用。它可和PHP、 JavaScript、ASP、ASP.NET、ColdFusion、Java、以及ABAP等不同的编程语言相结合。“FCKeditor”名称中的 “FCK” 是这个编辑器的作者的名字Frederico Caldeira Knabben的缩写。FCKeditor 相容于绝大部分的网页浏览器,像是 : Internet Explorer 5.5+ (Windows)、MozillaFirefox 1.0+、Mozilla 1.3+ 和 Netscape 7+。在未来的版本也将会加入对 Opera的支援。

ssrf漏洞复现,黑客利用漏洞打穿内网,危险了服务器

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

php从远程URL获取(mp4 mp3)音视频的流媒体数据

 /**
     * 从远程URL中获取媒体(如 mp4 mp3)的内容
     * @param mixed $file_url
     * @param mixed $media_type
     * @param mixed $curl_time_out
     * @throws Exception
     * @return mixed
     */
    public static function getRemoteMediaContent($file_url = '', $media_type = "Content-Type: video/mp4", $curl_time_out = 600000)
    {

        if (empty($file_url)) {
            throw new Exception('请传入远程url地址', Response::PARAM_ERROR);
        }

        $parse_bool = parse_url($file_url);
        if ($parse_bool === false) {
            throw new Exception('请传入有效的远程url地址', Response::PARAM_ERROR);
        }

        ini_set('max_execution_time', 0);

        $useragent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36";

        //开一个ch  用来获取资源HTTP头信息(主要获取视频长度)
        $ch = curl_init();

        // TRUE 会输出所有的信息,写入到STDERR,或在CURLOPT_STDERR中指定的文件。
        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        //允许 cURL 函数执行的最长秒数
        curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time_out);

        //需要获取的 URL 地址,也可以在curl_init() 初始化会话的时候
        curl_setopt($ch, CURLOPT_URL, $file_url);

        //TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。
        //(注意:这是递归的,"Location: " 发送几次就重定向几次,除非设置了 CURLOPT_MAXREDIRS,限制最大重定向次数。)。
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        // 启用时会将头文件的信息作为数据流输出(注意这里第一步只需要获取资源HTTP头信息 主要是为了得到内容的长度)
        curl_setopt($ch, CURLOPT_HEADER, true);

        // TRUE 强制获取一个新的连接,而不是缓存中的连接
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

        // FALSE 禁止 cURL 验证对等证书(peer'scertificate)。要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        //向服务器发送,包含了访问者系统引擎版本、浏览器信息的字段信息。
        //一般服务器识别出是爬虫请求,会拒绝访问。所以此时设置User-Agent,可以将爬虫伪装成用户通过浏览器访问。
        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

        // TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET
        curl_setopt($ch, CURLOPT_NOBODY, true);

        //TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
        //这里我们不需要关心
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        //执行 cURL 会话  这里我们只关心头信息  所以不需要获取返回的内容
        curl_exec($ch);

        //获取一个cURL连接资源句柄的信息  这里主要用来读取长度
        //-- CURLINFO_CONTENT_LENGTH_DOWNLOAD   从Content-Length: field中读取的下载内容长度
        $filesize = $length = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);

        //发送请求的媒体头类型
        header($media_type);

        //------ 获取资源长度告一段落  以下用于获取媒体视频的二进制内容------

        //总共接收的数据大小
        header("Content-length: " . $filesize);

        //接收的数据类型是 字节类型 即二进制
        header('Accept-Ranges: bytes');

        $partialContent = false;
        $offset = 0; //读取数据的初始位置

        if (isset($_SERVER['HTTP_RANGE'])) {

            $partialContent = true;

            //获得初始位置和数据长度
            preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);
            $offset = intval($matches[1]);
            $length = $filesize - $offset - 1;

            /***
            断点续传: 就是从文件上次中断的地方开始重新下载或上传,当下载或上传文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会去重头下载,
            这样很浪费时间。所以断点续传的功能就应运而生了。要实现断点续传的功能,需要客户端记录下当前的下载或上传进度,
            并在需要续传的时候通知服务端本次需要下载或上传的内容片段。
            HTTP的请求上定义了断点续传相关的HTTP头Range字段和Content-Range字段。
            比如说客户端在Header中设置Range=bytes22223333- 表示文件从22223333字节开始传,前面的字节不用传了。
            服务器收到请求,返回206 Partial Content。 Content-Length=44445555,Content-Range=bytes22223333-44445554/44445555

             */
            //Chrome在对于MP3文件的访问,返回的都是206 Partial Content
            header('HTTP/1.1 206 Partial Content');

            //每次接收数据的的范围
            header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
        }

        //重新开一个ch  用来获取内容
        $ch = curl_init();

        //如果支持分段发送数据
        if ($partialContent && isset($_SERVER['HTTP_RANGE'])) {

            //获取上次的范围
            preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

            $offset = intval($matches[1]); //开始位置
            $length = $filesize - $offset - 1; //获取长度

            //发送带有Range的请求头
            $headers = ['Range: bytes=' . $offset . '-' . ($offset + $length) . ''];
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time_out);

        curl_setopt($ch, CURLOPT_URL, $file_url);

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        // 启用时会将头文件的信息作为数据流输出(这里只需要获取内容 所以设置为false)
        curl_setopt($ch, CURLOPT_HEADER, false);

        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

        // TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET  [ 这里我们不需要输出头信息]
        curl_setopt($ch, CURLOPT_NOBODY, false);

        // TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
        //这里我们需要直接输出二进制数据
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);

        //执行 cURL 会话
        curl_exec($ch);
    }

试试Python每日一句定时app推送(python 每天执行一次)

前言

前几天在网上看到一篇文章《教你用微信每天给女票说晚安》,感觉很神奇的样子,随后研究了一下,构思的确是巧妙。好,那就开始动工吧!服务器有了,Python环境有了,IDE打开了...然而...然而...我意识到了一个非常严重的问题...没有女朋友 (T_T)...

微信开发已经活跃了很长时间了,在微信开发中有一个神奇的接口它叫模板消息接口

PHP 8.0性能翻3倍?四年亲测:这些项目升了哭晕!

2020年那个感恩节,当PHP 8.0带着“性能翻倍”的豪言横空出世时,无数程序员连夜备份代码准备升级。

四年过去了,那些宣称“性能提升3倍”的项目,真的跑出火箭速度了吗?

还记得当时铺天盖地的宣传吗?“JIT编译器让PHP浴火重生”、“性能碾压Node.js”、“PHP老树发新芽”…… 开发者圈一片沸腾。

Linux服务器如何安装CRMEB商城?宝塔面板+优化配置,提升性能30%

环境配置

一、 软件安装

宝塔安装系统软件:Nginx 、MySQL5.1+、PHP( PHP用7.1-7.4版本)、phpMyAdmin(Web端MySQL管理工具)。

解决Apache 2.4+PHP5.6不支持CURL

跑一个demo,突然发现,服务器上最普通的Apache 2.4+PHP5.6组合,不支持curl,报告没有curl_init函数;而php.ini里面已经打开了php_curl.dll,而且php -i的输出是正常的,说明curl是可以执行的。

折腾了半天百思不得其解,最后索性把php5.6、apache2.4以及对应的svn_mod,都升级到最新,发现仍然不好用,但是error.log报错了:

PHP Warning: PHP Startup: Unable to load dynamic library 'D:/services/web/php56/ext/php_curl.dll' - \xef\xbf\xbd\xd2\xb2\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xd6\xb8\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc4\xb3\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\r\n in Unknown on line 0

钉钉用户查询:根据手机号获取UserID

最近在做服务端发送钉钉工作通知消息给钉钉用户,需要先获取钉钉用户的UserID,遇到了钉钉新版旧版sdk版本问题一直无法获取用户的UserID,去查了deepseek返回了几个版本的代码都无法使用,最终通过HTTP POST请求方法去获取。

1.第一步先获取access_token

提高安全性在HTTP响应头中可使用的响应头字段

在年初的时候全国性的安全扫描,检测出了我公司系统的一些安全漏洞。之前在群里也有人问这些响应头怎么配置。今天正好把之前梳理的一些发布出来方便自己也方便他人使用。

X-Frame-Options

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言