专栏首页程序员小助手前端html+js如何直接调用后端php函数?

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

白帽子手法,想要通过客户端向后台注入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核心代码为:

$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内存储了访问该测试函数的次数,即网站访问计数器。

本文分享自微信公众号 - 程序员小助手(mql45ea),作者:walles

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「基础编程学习」 「PHP7数组详解」:第1章 (7)函数及异常处理

    之前在输出学生程序,用作文本渲染的时候,我们使用了check_score($score)这样的函数,用于封装功能。

    程序员小助手
  • PHP自带的DateTime类,Carbon扩展类,真正的“相见恨晚!”

    PHP有一个名为DateTime的类,可以帮助您读取、写入、比较或计算日期和时间。除了DATETIME之外,PHP中还有许多与日期和时间相关的函数,但它为大多数...

    程序员小助手
  • 干货 | 整理了7个必知必会的JavaScript函数

    但是web开发是一套综合的技术,牵涉到方方面面的知识。包括Linux服务器,TCP/IP网络,数据库,编程语言,HTML,JS,CSS等前端技术。

    程序员小助手
  • python lxml中etree的简单应用

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    于小勇
  • golang继承,和多态

    package main type ST struct{ } func (s *ST)Show(){ println("ST") } func (s *...

    李海彬
  • 经典决策树对比

    algo-decision-tree-conditional-probability

    用户2183996
  • spring mvc 静态资源 404问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    eguid
  • 大数据ETL实践探索(2)---- python 与aws 交互

    本系列文章主要针对ETL大数据处理这一典型场景,基于python语言使用Oracle、aws、Elastic search 、Spark 相关组件进行一些基本的...

    用户1539362
  • PS之“星球大战”

    宙浩瀚,自古以来人类对其一直抱有极大的好奇心。而作为宇宙的重要组成部分——星球,更是人类探索宇宙最直观的体现。就拿离地球最近的“月亮”来说,中国古代对其描写的诗...

    算法与编程之美
  • 华为网络工程师 | ensp中的华为防火墙设备如何能实现web登录做配置

    防火墙技术,最初是针对 Internet 网络不安全因素所采取的一种保护措施。顾名思义,防火墙就是用来阻挡外部不安全因素影响的内部网络屏障,其目的就是防...

    网络技术联盟站

扫码关注云+社区

领取腾讯云代金券