‘壹’ php开发api接口,如何做才算是安全的
这个问题很深
安全,不敢当,因为web安全问题很多,不仅仅是PHP编码而已,有很多安全上的问题需要做处理,像服务器漏洞、端口开放都会导致被黑,这都是很正常的。
只能说 比如在我做PHP开发过程的一些安全保护和在网络安全公司开发时的工作要求:
1、最基础的,提供的api接口 要配置https。
2、api返回响应的信息,要尽可能使用消息加密返回,如高位数的 rsa加密内容。
3、接收的回调开放接口,尽可能做到使用回调黑、白名单,如加ip白名单放行,或ip黑名单禁止访问。
4、不要相信用户输入、输入信息要进行编码转换、转义、过滤、使用框架和插件进行处理,如MySQL查询的要进行参数绑定、如显示问题要避免xss攻击会进行过滤。
5、授权操作,错误限制设置阀值、超过阀值限制访问、如最基础的登录功能。
6、常见额弱口令问题导致漏铜,应设置高强度口令,避免程序爆破。
7、文件上传问题、应严格校验文件类型、后缀、格式、及文件目录权限设置,从而避免文件上传漏洞导致恶意代码或webshell攻击。
8、开发环境和生产环境隔开,不要再生产上面开debug、及时更新使用框架漏洞补丁如PHP国内常用 tp系列以前偶尔爆出漏洞(我用的较多就是tp5 ....),还有框架不要用最新要选择最稳定的。
最后注意不管是验证还是过滤,在客户端执行过一次也好,在服务端,都要再次执行验证和校验。
和盛之文 我的文章保存网站,欢迎访问学习或参考
‘贰’ PHP,新网API接口开发的问题
用Curl吧
$host = 'url';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host);
// 返回结果
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 使用POST提交
curl_setopt($ch, CURLOPT_POST, 1);
// POST参数
$str = array('a=1','b=2','c=3');
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
// 结果
$res = curl_exec($ch);
curl_close($ch);
‘叁’ 实用的15款开源PHP类库
PHP库给开发者提供了一个标准接口 它帮助开发者在PHP里充分利用面向对象编程 这些库为特定类型的内置功能提供了一个标准的API 允许类可以与PHP引擎进行无缝的交互 此外 开发者使用这些类库还可以简化工作流程 提供工作效率
下面就一起来看看这些非常实用且免费的类库吧 希望它们能助你一臂之力
Requests
Requests是一个用PHP编写的HTTP库 遵循ISC开源协议 托管在GitHub上 Requests取代了Python HTTP/ 以外的一切工作———让你与Web服务可以无缝的结合
Requests提供了一致的API 并且使用cURL或fsockopen(具体取决于可用性) 它还简化了发送请求 接受HEAD GET POST PUT DELETE或PATCH并且添加标头 表单数据和多个部分组成的文件 其次 该库还适用于国际域名 身份验证 自动压缩gzip压缩响应等 综上所述可以看出 Requests是一个非常好用且可以友好托管HTTP请求的标签
Munee
Munee是一个集图片尺寸调整 CSS JS合并/压缩 缓存等功能于一身的PHP库 可以在服务器端和客户端缓存资源 它集成了PHP图片操作库Imagine来实现图片尺寸调整和剪切 之后进行缓存
Munee可以自动编译LESS SCSS和CoffeeScript 并且可以把CSS+JS文件合并成一个单一的请求 此外 还可以对这些CSS JS文件进行精缩 让其拥有更好的性能表现 该库还可以轻易地与任何代码集成
Ratchet
Ratchet是一个PHP库 WebSockets工具包 开发者可以使用它在客户端和服务器端之间构建实时 双向的App应用 并且可以快速简单地构建事件驱动应用程序(而不是传统的HTTP 请求/响应应用程序)
Swift Mailer
Swift Mailer是一个功能丰富的PHP邮件库 不依赖于PHP自带的mail() 函数 因为该函数在发送多个邮件时占用的系统资源很高 Swift直接与SMTP服务器通讯 具有非常高的发送速度和效率
Unirest
Unirest是一个轻量级的HTTP开发库 可用于PHP Ruby Python Java Objective C等开发语言 支持GET POST PUT UPDATE DELETE操作 它的调用方法与返回结果对所有开发语言来说 都是相同的
Detector
Detector是一个开源的PHP类库 用于检测用户的浏览器环境 它可以获得浏览器的使用情况和浏览器的HTML CSS 功能 并分析是否是移动 平板电脑 桌面或网页爬虫和其他项 如 颜色深度 视频尺寸 Cookie等 该库对每个浏览器用户都使用单一的用户代理字符串来自动适应新浏览器 版本和设备
PHP Thumb
PHP Thumb是一个PHP类 用来生成图片的缩略图 只需数行代码即可 支持多种图片来源 包括文件系统或者数据库 支持大多数图片格式 并可对图片进行旋转 剪切 加水印等等 可自定义缩略图的质量 提供内建的缓存以降低服务器的负载
Zebra Image
Zebra Image是一个开源的轻量级图像处理库 并且是一款面向对象库 只需PHP GD 扩展 并支持缩放 裁剪 旋转和翻转操作 它可以用于 jpg gif png等格式
Hybrid Auth
HybridAuth是一个开源PHP类库 用于通过微博/社交网站和ID来提供验证功能实现同步登录网站功能 它能够很方便的与现有网站相集成 只要引用一个文件并添加几行代码就能够实现登录 一旦验证 HybridAuth会提供连接用户的标准化相关资料 此外 除了验证功能 这个类库能够让我们与用户连接的social API客户端相交互
Gantt Charts
Gantti是一个开源的PHP类 帮助用户即时生成Gantt图表 使用Gantti创建图表无需使用JavaScript 是纯HTML CSS 图表默认输出非常漂亮 但用户可以自定义样式进行输出(SASS样式表)
Mobile Detect
Mobile Detect是一个PHP类 通过User Agent检测各种手机设备 并结合HTTP Header来检测移动设备环境 该类库最强大的地方是 它有一个非常完整的库 可以检测出所用的设备类型(包括操作类型 以及手机品牌等都能检测)和浏览器的详细信息
ImageWorkshop
顾名思义 ImageWorkshop是一个管理和操作图片的PHP类库 这个类拥有类似图片编辑软件的逻辑 基于层的概念 可以叠加很多层或层组(每一层不同的操纵选项) 它还支持许多功能 比如水印 裁剪 移动 缩放 旋转 叠加等
JqmPhp
JqmPhp是一个PHP开源类库 旨在简化jQuery与PHP来进行移动开发 用于生成使用jQuery Mobile框架所需要的HTML文件 该类库的文件是独立的 所以你可以根据需要来选择使用
PHP Image Cache
Image Cache是一个轻量级的PHP类 可以在用户浏览器里压缩 移动 缓存图片 这个类提供一些简单的设置如 目录 根路径URL等 然后针对每一张图片调用压缩功能
Imagine
Imagine是一个面向对象的PHP类库 用于图片操作 这个类库能够处理一些经常用到的操作如 缩放 裁剪 应用过滤等 其Color类库可用于对任意特定的颜色生成RGB值 并且还提供一些方法来绘制图形如 圆弧 椭圆 线 片等
lishixin/Article/program/PHP/201404/30630
‘肆’ 怎样使用百度api去开发一个php项目
比如一个自定义函数:function test(){echo ‘hello world’;}就可以叫做 api。api 既可以是单个的函数,也可以是封装在类里的方法,当然它们也是程序代码。开发一个 api 的流程可以很简单,也可以很复杂,视具体的编程任务而决定,并没有特定的规则。比如,你需要为自己建立一个常用的函数库,命名为 my.lib.php然后把你自己编写的自定义函数,全部写在这个文件里面,那么,你就拥有了自己的api。开发的时候,只需要引入 my.lib.php,你就可以调用自己的 api 了。这是一个比较简单的例子。稍微复杂一点的,你可以把函数封装在类里面,方便继承和重用,还可以根据函数名称做一些程序设计,这个一句话说不清楚,给一个简单的例子吧:class mylib{function showmy(){echo ‘这是我的一个类方法’;}}调用的时候,先要实例化类,然后再调用方法。再复杂一点的就是使用类接口,区别就是接口里面定义的只是方法原型,而你需要通过具体的类来实现接口中的函数,具体请参考 php 手册,关于接口的介绍。还有一种接口不是通过直接访问接口代码来实现功能的,这就是我们常说的 web service,俗称远程调用:比如:我的一个网站 www.test.com/api在这个网址里包含了我开放的一些接口,可以供网络上的其它用户来获取我网站的会员信 息 等 , 假 设 这 个 接 口 名 叫 userinfo , 那 么 开 发 者 可 以 通 过www.test.com/api/userinfo 来获取某一个会员的信息,当然具体的代码肯定很多,这里只是举例子说明。尤其要着重说明的是,开发者不是通过直接访问 www.test.com/api/userinfo 来获取用户信息的,当向别人开发自己网站的接口时,你需要编写一些接口文件,供别人来使用 ,一般可以通过 fsockopen 函数来实现。
‘伍’ 如何使用PHP的CodeIgniter框架来编写API接口
1.将解压的框架包放到的你的php环境的www/api目录下:这里建立api目录作为测试项目目录。并运行localhost/api/index.php,就可以看到环境界面了
9.在浏览器中运行接口,根据不同的参数返回不同的数据。
获取的是json数据
localhost/api/index/php?username=张三&format=json
获取的是xml数据
localhost/api/index/php?username=张三&format=xml
‘陆’ PHP 的API接口
使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证
原理
从图中可以看得很清楚,前台想要调用接口,需要使用几个参数生成签名。
时间戳:当前时间
随机数:随机生成的随机数
口令:前后台开发时,一个双方都知道的标识,相当于暗号
算法规则:商定好的运算规则,上面三个参数可以利用算法规则生成一个签名。前台生成一个签名,当需要访问接口的时候,把时间戳,随机数,签名通过URL传递到后台。后台拿到时间戳,随机数后,通过一样的算法规则计算出签名,然后和传递过来的签名进行对比,一样的话,返回数据。
算法规则
在前后台交互中,算法规则是非常重要的,前后台都要通过算法规则计算出签名,至于规则怎么制定,看你怎么高兴怎么来。
我这个算法规则是
时间戳,随机数,口令按照首字母大小写顺序排序
然后拼接成字符串
进行sha1加密
再进行MD5加密
转换成大写。
‘柒’ 如何用PHP编写简单的api数据接口
编写PHP简单API数据接口的具体步骤如下:
一、准备开发工具与环境:
- 需要安装phpStudy、SQLyog和一个编码工具,如sublime text、webStorm或vs code,根据个人喜好选择。
- 启动phpStudy,检查Apache和MySQL服务状态,确保绿色显示且版本兼容所用的node.js或SQLyog版本。确保项目代码放置于phpStudy的WWW目录下。
二、配置数据库:
- 使用SQLyog连接数据库,输入MySQL主机地址为localhost,用户名和密码通常为root,端口默认为3306。
- 创建数据库和表,填写所需字段、数据类型、长度、是否允许为空等信息,完成表的创建。
三、搭建后台开发环境:
- 选用流行框架如Laravel,通过管理工具下载并解压至phpStudy的WWW文件夹。
- 在浏览器输入解压文件夹名称/server/public/,若出现成功界面则表示开发环境搭建完成。
四、编写接口:
- 连接本地数据库,修改.env文件中的配置信息以匹配数据库设置。
- 在app目录下创建Question.php文件,用于访问question数据表。
- 在routes/web.php文件中设置路由,如Route::any('getQuestion', "QuestionController@getQuestion")。
- 测试接口,通过浏览器输入localhost/文件夹名称/server/public/getQuestion?questionId=1,验证接口是否返回预期数据。
五、总结与部署:
- 在开发过程中,可能会遇到各种问题,这考验了解决问题的能力。
- 注意本地开发环境与线上部署的差异,本地开发使用本地配置,而线上部署则需要调整配置以适应服务器环境。