api管理系统php源码(Api 国内PHP开源接口框架)

api管理系统php源码(Api 国内PHP开源接口框架)

  上一章起了个头,这一章咱们亲身做一下这个API的基础结构。

  我们给它叫做“老赵API系统”。

  首先,我们要做的这个API系统是私有的,不开源的,不分发给其它人一起用(当然你非要大力推广,也随便你)。

  其次,我故意遗漏了一个小小的点子,这个点子我自己用,我也是怕我这个办法泄露后会有安全问题。

  就当是抛砖引玉吧。

  先说要注意的几点:

  0、不要使用默认首页

  1、不使用SESSION和COOKIE

  2、每次访问都需要验证用户名密码

  3、任何单个文件都不允许能正常运行

  4、任何单个文件都不允许能单独实现任何功能

  5、未验证成功身份时不输出任何错误提示

  相信很多高人一看这几条就会知道我要怎么做。也会有一部分人会嗤之以鼻说太初级。

  管他呢,反正这是我自己摸索出来的,就是黑客黑我也只能在操作系统方面下手,在我这套系统里他永远不可能有成功的访问请求。

  下面详细说:

  0、不要使用默认首页。

  如果你的环境里首页设置了很多,比如index.,index.html,default.html,default.php之类的,那么你API的接口文件一定不能用这些,比如你可以用iLaoZhao_XX_api.php,这谁猜得到?

  1、不使用SESSION和COOKIE。

  COOKIE是用明文存在于用户端的,很容易查看和修改,这个大家都清楚。而PHP的SESSION也依赖于COOKIE来存储一个SESSION_ID。并且我们的API要每次访问就返回一次数据,很多访问方法并不会存储COOKIE,这会导致SESSION失效。

  2、每次访问都验证用户名密码。

  现在流行那个啥叫Token的方式,我懒得研究,倒不如每次都验证用户名和密码,这样等密码泄露后只要我改一个密码,他那边立马就不能用了。都不用等他那边信息过期。当然我们不能明文传递这些东西,需要做一定加密处理。

  3、任何单个文件都不允许能正常运行。

  资源文件夹不能有任何可执行文件。并且尽量多分几个文件,所有的文件相互依赖,并且把它们互相组织起来的文件又是另一个单独文件,这样即便别人知道了我们的文件路径和文件名,当访问这个文件时,也无法正常运行。

  4、任何单个文件都不允许能单独实现任何功能。

  某个文件要实现功能,必须依赖其它文件内的函数或类,并且当前文件不能知道这些函数和类具体在哪个文件里实现的。这样即便这个文件的源代码泄露,对方也不知道里面的依赖关系,不会连累到其它文件。

  5、未验证成功身份时不输出任何错误提示。

  在用户名密码出错时,系统不要输出任何有用的信息,或者输出一个假的404信息,这样别人在试探我们的系统时,根本不知道是哪一步出错了,而我们的客户端可以根据里面的暗语来判断状态。

  我做一个小例子来说明一下,这个小例子只是抛砖引玉,并不是我最终的代码样子。

  文件树结构:

  老赵API文件树结构

  根目录下只有一个文件夹,整个API系统都通过一个接口文件”DaYeLaiWanA.php”来调用。

  怎么样,不知道文件结构的人根本猜不对你有哪些文件,也就不能访问任何文件。

  下面的代码没有使用太先进的语法,比如类和对象啊命名空间啊啥的,新版本PHP添了好多特性,但我比较倾向于不去使用它们,我要尽量的让代码对环境没有要求,在尽可能多的版本环境下都能运行。

  毕竟我们要的是安全,而不是让所有人能读懂我们的代码。

  我们要尽可能的不使用教科书上的通用的写法,尽可能搞一套自己的写法。

  下面是DaYeLaiWanA.php的代码:

  文件我写了注释,方便大家看,实际在使用时不能有这些注释,这些注释只能方便别人破解我们的系统,并且这个接口文件尽可能进行代码混淆加密。

  然后是一个获得当前用户信息的小例子API,这个API文件存在了

  /iLaoZhao_api/public/login/usrMsg.php里面。在调用时大概URL是这样:

  API代码内容usrMsg.php为:

  这里面的checkUserNamePassWord()函数(在iLaoZhao_funs文件夹内的login.php文件里)也比较关键:

  代码里都有注释,应该能看清楚。而且还有其它的自定义函数我就不放代码了。

  这样我们在扩充API时只需要在对应路径下写PHP代码文件就行,而且很多函数可以直接使用,不用include任何文件。

  而且这个系统内所有的文件在单独访问时都会出错(可以设置PHP不显示错误信息),而接口文件在参数不正确的情况下也不会有什么具体运行结果。

  也没有默认的首页文档可以访问。

  文件路径和文件名都没规律,在网上都查不到参考。

  那么想黑掉这套API只有两个办法:

  0、黑掉服务器操作系统,再从文件系统入手。

  1、破解客户端代码或者拦截访问数据,找到访问规律。

  这两点暂时无能为力解决。

  **边写文档边写代码,头有点乱,可能有遗漏的东西,不知道大家能不能看懂。

  **此API系统还有很多地方可以进一步加密处理,但我个人感觉没必要了。已经够可以了。

  **此代码没有使用太先进的语法,比如类啊命名空间啊啥的,新版本PHP添了好多特性,但我比较倾向于不去使用它们,我要尽量的让代码对环境没有要求,在尽可能多的版本环境下都能运行。

  毕竟我们要的是安全,而不是让所有人能读懂我们的代码。

  有啥忘了的以后再补充吧。

推荐阅读