c语言sscanf函数的用法是什么
304
2023-02-03
本文目录一览:
这个问题很深
安全,不敢当,因为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接口是经常做的php api 接口开发,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用php api 接口开发我们的接口,获取数据,因此就要使用安全验证
原理
从图中可以看得很清楚,前台想要调用接口,需要使用几个参数生成签名。
时间戳:当前时间
随机数:随机生成的随机数
口令:前后台开发时,一个双方都知道的标识,相当于暗号
算法规则:商定好的运算规则,上面三个参数可以利用算法规则生成一个签名。前台生成一个签名,当需要访问接口的时候,把时间戳,随机数,签名通过URL传递到后台。后台拿到时间戳,随机数后,通过一样的算法规则计算出签名,然后和传递过来的签名进行对比,一样的话,返回数据。
算法规则
在前后台交互中,算法规则是非常重要的,前后台都要通过算法规则计算出签名,至于规则怎么制定,看php api 接口开发你怎么高兴怎么来。
我这个算法规则是
时间戳,随机数,口令按照首字母大小写顺序排序
然后拼接成字符串
进行sha1加密
再进行MD5加密
转换成大写。
下面做一个开发 API 接口php api 接口开发的简单实例:
从 articles 表php api 接口开发,通过 id 获取一篇文章。
访问该接口的 URL:
1
http://www.e.com/articles/details?id=1
数据库表结构如下:
1
2
3
4
5
6
7
CREATE TABLE `articles` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`dateline` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第一步
修改数据库配置文件php api 接口开发,MixPHP 的应用配置文件中,关于数据库的信息都引用了 common/config/database.php 文件。
第二步
修改应用配置文件:
修改 Response 组件默认输出格式为 JSON 格式。
修改 404/500 错误输出格式为 JSON 格式。
框架默认的 404/500 响应是网页,而 API 服务需要响应 JSON 数据,通常其php api 接口开发他传统 MVC 框架需要修改很多地方才可完成这个需求,MixPHP 本身就提供该种配置,只需修改一下配置即可。
MixPHP 的默认 Web 应用中有两个配置文件,分别为:
main.php : 部署在 mix-httpd 时使用。
main_compatible.php :部署在 Apache/PHP-FPM 时使用。
开发 API 时我们推荐在 Apache/PHP-FPM 下开发,上线再部署至 mix-httpd 即可,反正是无缝切换的。
现在我们修改 response 键名下的 defaultFormat 键为 mix\http\Error::FORMAT_JSON,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 响应
'response' = [
// 类路径
'class' = 'mix\http\compatible\Response',
// 默认输出格式
'defaultFormat' = mix\http\Response::FORMAT_JSON,
// json
'json' = [
// 类路径
'class' = 'mix\http\Json',
],
// jsonp
'jsonp' = [
// 类路径
'class' = 'mix\http\Jsonp',
// callback键名
'name' = 'callback',
],
// xml
'xml' = [
// 类路径
'class' = 'mix\http\Xml',
],
],
然后修改 main_compatible.php 文件中 error 键名下的 format 键为 mix\http\Error::FORMAT_JSON,如下:
1
2
3
4
5
6
7
// 错误
'error' = [
// 类路径
'class' = 'mix\http\Error',
// 输出格式
'format' = mix\http\Error::FORMAT_JSON,
],
第三步
创建控制器:
1
apps/index/controllers/ArticlesController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
namespace apps\index\controllers;
use mix\facades\Request;
use mix\http\Controller;
use apps\index\messages\ErrorCode;
use apps\index\models\ArticlesForm;
class ArticlesController extends Controller
{
public function actionDetails()
{
// 使用模型
$model = new ArticlesForm();
$model-attributes = Request::get();
$model-setScenario('actionDetails');
if (!$model-validate()) {
return ['code' = ErrorCode::INVALID_PARAM];
}
// 获取数据
$data = $model-getDetails();
if (!$data) {
return ['code' = ErrorCode::ERROR_ID_UNFOUND];
}
// 响应
return ['code' = ErrorCode::SUCCESS, 'data' = $data];
}
}
创建错误码类:
1
apps/index/messages/ErrorCode.php
1
2
3
4
5
6
7
8
9
10
11
12
<?php
namespace apps\index\messages;
class ErrorCode
{
const SUCCESS = 0;
const INVALID_PARAM = 100001;
const ERROR_ID_UNFOUND = 200001;
}
创建表单验证模型:
1
apps/index/models/ArticlesForm.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
namespace apps\index\models;
use mix\validators\Validator;
use apps\common\models\ArticlesModel;
class ArticlesForm extends Validator
{
public $id;
// 规则
public function rules()
{
return [
'id' = ['integer', 'unsigned' = true, 'maxLength' = 10],
];
}
// 场景
public function scenarios()
{
return [
'actionDetails' = ['required' = ['id']],
];
}
// 获取详情
public function getDetails()
{
return (new ArticlesModel())-getRowById($this-id);
}
}
创建数据表模型:
1
apps/common/models/ArticlesModel.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
namespace apps\common\models;
use mix\facades\RDB;
class ArticlesModel
{
const TABLE = 'articles';
// 获取一行数据通过id
public function getRowById($id)
{
$sql = "SELECT * FROM `" . self::TABLE . "` WHERE id = :id";
$row = RDB::createCommand($sql)-bindParams([
'id' = $id,
])-queryOne();
return $row;
}
}
以上就是全部代码的编写。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~