【问题标题】:Server side includes (ssi) on IIS server, read POST request data fails服务器端在 IIS 服务器上包含 (ssi),读取 POST 请求数据失败
【发布时间】:2015-09-26 17:15:50
【问题描述】:

我的目标是我的 SSI (shtml) 将解析 POST 数据参数并返回一个基于这些参数的长加密字符串。 我使用 IIS 作为服务器。

我的限制:

  1. 我无法更改网址 - /document.shtml
  2. shtml 只需要返回base 64 字符串结果。

我尝试了什么:

  1. 在 shtml 中使用“exec cgi”,这样:

document.shtml:

<!--#exec cgi="/pythonApp/test.py?sdfsdf=sdfsdf" -->

test.py(简化版,后面没有加密逻辑):

import cgitb
cgitb.enable()
import base64,urllib,json,os,sys
import cgi

print "Content-Type: text/plain;charset=utf-8"
print

cl, _ = cgi.parse_header(os.environ['CONTENT_LENGTH'])
if (int(cl)>0):
	data = sys.stdin.read(int(cl))
	input_j = json.loads(data)

	print "AB : ",input_j["AB"] 
else:
	print "Failed to read POST request"

这里的问题是,如果我将发布请求发送到 .../test.py ,那么它可以工作, 但是如果我将请求发送到 document.shtml,内容长度仍将为环境变量所描述的正数,但标准输入会出错。

  1. 我的另一个想法是从 shtml 本身读取 POST 数据并将其传递给 cgi,这样:

<!--#exec cgi="/pythonApp/test.py?sdfsdf=sdfsdf" -->

问题是我浏览了网络并没有找到从 shtml 中执行此操作的方法。

有什么建议吗?我错过了一些简单的东西吗?

【问题讨论】:

    标签: python iis post cgi ssi


    【解决方案1】:

    我还没有找到使用 SSI 指令来做这件事,我知道标准输入没有从主脚本传递给 cgi。

    所以我找到了其他解决方案,仍然可以解决我的限制。

    在 SHTML 的 IIS 处理程序映射中,我将可执行文件配置为 php。

    在 shtml 中我自己编写了一个 php 代码(这里只显示打印 json 字符串的示例):

    <?php var_dump($HTTP_RAW_POST_DATA); ?>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多