api接口管理系统php版(PHP开发的简单的api接口管理系统源码)
今天给各位分享关于PHP开发的简单的api接口管理系统源码(api接口管理系统php版)的知识,希望对你有帮助,现在开始把!
1、最后一章开始了。在这一章,让我们来做这个API的基本结构。我们称之为老赵API系统。
2、首先,我们要做的API系统是私有的,不是开源的,不会分发给其他人使用(当然你要大力推广,随便你)。其次,我故意漏了一个小点子,是我自己用的,也怕我的 *** 泄露后会有安全问题。姑且称之为邀请吧。
3、先说以下几点:0.不要使用默认主页。不使用会话和COOKIE。每次访问时,您都需要验证您的用户名和密码。
4、不允许单个文件正常运行。没有一个文件可以独立实现任何功能。当身份验证不成功时,不输出任何错误提示。
5、相信很多位高权重的人看到这些文章就知道我想干什么了。有人会嗤之以鼻,说太初级了。谁在乎呢。
6、反正这是我自己发现的。就算黑客黑了,我也只能从操作系统入手。在我的系统里,他不可能有成功的访问请求。
7、下面详细说一下:0.不要使用默认主页。如果在你的环境中首页有很多设置,比如index.php、index.html、default.html、default.php等.那么你的API的接口文件一定不能使用这些。比如可以用ilaozhao_xx_api.php。
8、谁能猜到?不使用会话和COOKIE。COOKIE以明文形式存在于客户端,便于查看和修改。这个大家都知道。
9、而PHP的SESSION也依赖于COOKIE来存储一个SESSION_ID。并且我们的API必须在每次被访问时返回数据。很多访问 *** 不存储COOKIE,会导致会话失效。
10、每次访问时验证用户名和密码。现在流行的叫Token的方式就是我懒得研究了。更好每次都验证用户名和密码,这样如果我在密码泄露后改了一个密码,就不能马上在那里使用了。
11、甚至不用等他的信息过期。当然,我们不能用明文传递这些东西,所以我们需要做一些加密。不允许单个文件正常运行。
12、该文件夹不能有任何可执行文件。并且尽量分割出尽可能多的文件,所有的文件都是相互依赖的,把它们组织在一起的文件是另外一个单独的文件,这样别人即使知道我们的文件路径和文件名,在访问这个文件的时候也无法正常运行。没有一个文件可以单独实现任何功能。
13、一个文件必须依赖其他文件中的函数或类来实现其功能,当前文件无法知道这些函数和类是在哪个文件中实现的。即使这个文件的源代码泄露了,对方也不知道里面的依赖关系,所以不会涉及到其他文件。当身份验证不成功时,不输出任何错误提示。
14、当用户名和密码错误时,系统不应该输出任何有用的信息或者一个假的404信息,这样别人测试我们的系统时,根本不知道哪一步出了问题,我们的客户端可以根据里面的码字判断状态。我举个小例子说明一下,这个小例子只是一种引玉的方式,不是我的最终代码。文件树结构:
15、树形结构:老赵API文件树结构根目录下只有一个文件夹,整个API系统通过一个接口文件”DaYeLaiWanA.php”打 *** 。
16、反正不知道文件结构的人根本猜不到你有哪些文件,所以也无法访问任何文件。下面的代码没有使用太高级的语法,比如类和对象命名空等。PHP的新版本增加了许多功能,但我宁愿不使用它们。
17、我会尽量让代码对环境没有要求,尽可能多的版本运行。毕竟我们要的是安全,不是每个人都能看懂我们的代码。我们应该尽量不要用课本上通用的写作 *** ,而是要发展自己的写作 *** 。
18、以下是DaYeLaiWanA.php的代码:
19、include "./iLaoZhao_funs/postget.php"; //没有依赖,但也不实现任何具体功能include "./iLaoZhao_funs/login.php"; //依赖pdo,dbfuns,postget和接口文件include "./iLaoZhao_funs/curl.php"; //没有依赖,但也不实现任何具体功能include "./iLaoZhao_funs/dbfuns.php"; //依赖pdo和接口文件//上面这些文件里涉及到安全的功能都有依赖,并且他们不知道要用的函数在哪//全靠这个接口文件把它们组合到一起//并且上面的函数里也会用到接口文件的函数(就是下面那个)//这些因素缺一不可,只能由接口文件来整合他们//上面这些文件和其它的API文件,都无法单独运行。不是缺这就是缺那。//下面这俩函数是故意没单独放文件里的,为的就是其它文件缺少这个接口文件时在调用这个函数时会出错。
20、function output2Die($msg, $code = -1, $data = ''){ $dieMsg['code'] = $code; $dieMsg['msg'] = $msg;$dieMsg['data'] = $data; echo json_encode($dieMsg); die();}function isPhone($phonenumber){ return preg_match("/^1[3-9]d{9}$/", $phonenumber);}$area = POST("area");//要使用的API种类$class = POST("class");//要使用的API小分类$fun = POST("fun");//要使用的API功能//清理POSTunset($_POST['area']);unset($_POST['class']);unset($_POST['fun']);if ($class !== FALSE && $fun !== FALSE){ if ($area == false){$area = "public";} //生成API文件全名,这里没加密,你可以自己变动这里。 $incFile = dirname(__FILE__)."/{$area}/{$class}/{$fun}.php"; if (file_exists($incFile)){ //检查API文件是否存在,其实不检查也行。include "./config/pdodb.php"; //创建数据库连接,依赖接口文件 include $incFile;//将单独的API文件导入进来 }else{//我因为调试的原因,显示了错误信息,要求高的可以去掉。
21、output2Die("无效的请求", -1); }}else{output2Die("无效的请求", -2);}为了您的方便,我已经在文件上写了注释。其实用的时候是不能有这些评论的。这些评论只能方便别人破解我们的系统,这个接口文件尽量用代码混淆加密。
22、然后是一个获取当前用户信息的小示例API。这个API文件存在于
23、/ilaozhao _ API/public/log in/usr msg . PHP中,调用时,URL大致是这样的:https://你的域名/iLaoZhao_api/DaYeLaiWanA.phpPOST数据为:{key:"用户名密码时间加密字符串运算后的结果",class:"login",fun:"usrMsg",userName:"该用户的用户名"}API内容usrMsg.php是:0){output2Die("成功。
24、",1,$rec);}else{output2Die("找不到该用户。",-1);//要求高的,不要输出错误信息。}}output2Die("失败",-2);//要求高的,不要输出错误信息。
25、这里的checkUserNamePassWord()函数(在iLaoZhao_funs文件夹的login.php文件中)也很关键:
26、//即便被拦截了,也算不出规律来,当然源码泄露了就不行了。//不能太精确,因为客户端与服务器端的时间不可能完全一样。$keyStr_Today = date('Ymd',time());//访问数据库,一定要用PDO的这个参数方式。
27、//这个方式在代入数据与直接写在SQL语句里不一样。//sql注入在这种使用方式下完全不会生效。$sqlPar['username'] = POST("userName"); //这个没加密的必要,这个在输入框里就能看到,而且也会在很多地方显示。
28、if($sqlPar['username'] === false || $key === false){//非法调用}//不要在sql里直接比对用户名密码//而且传过来的数据也没有密码//要取出该用户的记录,然后计算后与传过来的加密身份信息对比$sql = "select * from tb_users where userName=:username"; //你可以在这limit 1$rec = db_query($sql, $sqlPar);if($rec['count'] >0){$keyInDB=md5(md5($keyStr).md5($rec['rows'][0]['userName']).md5($keyStr_Today).md5($rec['rows'][0]['passWord']));//上面这句是加密方式,把加密字符串、用户名、当前日期、密码的MD5连接起来并再计算一次MD5//当然你还可以再加点别的东西,比如字符串反转,以及其它变量之类的。//上面这句计算出来的和$key中的一样时,说明密码是对的。if($key==$keyInDB){//用户名密码对//此时我们啥也不做//或者你想设置某些变量也行}else{//否则die();//结束程序运行,}}}代码里有注释,应该能看清楚。
29、而且还有其他自定义函数,我就不放代码了。这样,我们在扩展API的时候,只需要在相应的路径中编写PHP代码文件,很多函数不需要包含任何文件就可以直接使用。而且这个系统的所有文件单独访问都会出错(PHP可以设置为不显示错误信息),参数不正确接口文件也不会有任何具体的运行结果。
30、也没有可访问的默认主页文档。路径和文件名不规范,网上找不到参考。那么破解这个API只有两种 *** :0.黑掉服务器操作系统,然后从文件系统入手。
31、破解客户端代码或者截取访问数据,找到访问规则。这两个问题我们都无能为力。**一边写文档一边写代码,头有点乱,可能缺了点什么。
32、不知道你能不能看懂。**这个API系统还有很多地方可以进一步加密,但我个人觉得没必要。够了。
33、**这段代码没有使用太高级的语法,比如类命名空等等。PHP的新版本增加了许多功能,但我宁愿不使用它们。我会尽量让代码对环境没有要求,尽可能多的版本运行。
34、毕竟我们要的是安全,不是每个人都能看懂我们的代码。如果你忘了什么,请稍后补充。
好了,PHP开发的简单的api接口管理系统源码(api接口管理系统php版)的知识介绍就到这里,本文到此结束!
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 203304862@qq.com
本文链接:https://jinnalai.com/n/188835.html