前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端html+js如何直接调用后端php函数?

前端html+js如何直接调用后端php函数?

作者头像
程序员小助手
发布2020-04-08 11:22:52
4.2K0
发布2020-04-08 11:22:52
举报
文章被收录于专栏:程序员小助手程序员小助手

白帽子手法,想要通过客户端向后台注入php函数并执行?

除非后台不检查你的请求数据,甭管什么,直接执行!那叫“国门大开”!

实际上,可能吗?除了使用表单给后台提供数据,想想,你向Linux系统写入文件试试?什么用户,哪个组,有无write权限?这些读写权限,您能过吗?

题主说访问后端PHP,那么有两个方式,

1)借由web服务器访问php-fpm解析php文件并执行。

2)PHP命令行开服务,指定端口对外开放。

也就是说,题主只能走HTTP,WS协议。【ssh,ftp等不知道html+js能不能发起,请大神补充。】这两个协议对于linux系统的操作权限,已有限定,不可能让你烧杀抢掠。


退一万步讲,题主就是想要js发送form表单,发一串'drop database xxx' 或 'rm -Rf ./*' 或者 ':(){ :|:& };:' 类似这种东西。可不可以呢。可以啊,php接收之后,执行eval(), shell_exec(), proc_open(),那么多系统级的函数,尽管用就是。

原则上前端html+js是不能直接调用后端php中的函数的并返回结果的。

菜农在学习网站编程后,就被此事困扰很长时间。

因为前端的js可以通过ajax技术带参数访问后端的php过程,并返回结果。

那么是否js也能带参数访问任意php函数并返回结果?

菜农在网友的指点下完成此设想并测试通过!

其核心思想是通过js的ajax调用php的call_user_func_array()函数,以实现任意php函数的调用。

特别注意:

为了网站的安全和防止黑客的攻击,特别设立了$funclst数组,js只能调用$funclst数组内的特定函数。

php核心代码为:

代码语言:javascript
复制
$funclst = array("f0", "f1", "f2", "a1", "a2", "a3", "a4", "HotCount");
$func = $_REQUEST["function"];
if(in_array($func,$funclst) && function_exists($func)){//只能调用例程函数
if(isset($_REQUEST["age"]) && strpos(strtolower($_REQUEST["age"]), "http://")){
echo "函数$func()的参数中包含非法字符!!!";
} else {
$age =isset($_REQUEST["age"])? explode(",",$_REQUEST["age"]) : array();//参数以","分割
echo call_user_func_array($func,$age);
}
}else{
echo "函数$func()不存在!!!";
}

javascript通过Ajax直接调用任意PHP函数多参数例程

菜农在网友的指点下完成此例程,非常感谢!!!

如图所示,前两个分别是html和php的源码(csv内存储了访问该测试函数的次数,即网站访问计数器。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档