英语法语西班牙语

Ad


OnWorks 网站图标

haserl - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 haserl

这是可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行的命令 haserl,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


haserl - 嵌入式环境的 cgi 脚本程序

概要


#!/usr/bin/haserl [--外壳=路径规范] [--上传目录=目录] [--上传处理程序=处理器]
[--上传限制=限制] [ - 全都接受] [--接受-无] [ - 沉默的] [--调试]

[文本] [ <% shell 脚本 %> ] [ 文本 ] ...

商品描述


Haserl 是一个小型的 cgi 包装器,允许“PHP”风格的 cgi 编程,但使用 UNIX
类似 bash 的 shell 或 Lua 作为编程语言。 它非常小,因此可以使用
在嵌入式环境中,或者像 PHP 这样的东西太大的地方。

它将三个功能组合到一个小型 cgi 引擎中:

它解析 POST 和 GET 请求,将表单元素作为名称=值对放入
CGI 脚本使用的环境。 这有点像 联合国大会 包装。

它打开一个外壳,并将所有文本翻译成可打印的语句。 所有文字
<% ... %> 内的结构被逐字传递给外壳。 这有点
喜欢写作 PHP 脚本。

可以选择安装它以将其权限授予脚本所有者,
给它一些安全功能 执行 or cgi包装器.

配置 概要


这是命令行选项的摘要。 请参阅 配置 下的部分
完整描述的长选项名称。

-a --接受全部
-n --不接受
-d --调试
-s,--外壳
-S, --沉默
-U,--上传目录
-u,--上传限制
-H,--上传处理程序

配置


- 全都接受
程序通常仅在 REQUEST_METHOD 为 POST 时才接受 POST 数据并且
仅当 REQUEST_METHOD 为 GET 时才接受 URL 数据上的数据。 这个选项
无论 REQUEST_METHOD 是什么,都允许接受 POST 和 URL 数据。
设置此选项时,REQUEST_METHOD 优先(例如,如果方法
是POST,FORM_variables取自COOKIE数据、GET数据、POST数据,在
那个命令。 如果方法是GET,则FORM_variables取自COOKIE数据,POST
数据和 GET 数据。)默认是不接受所有输入法 - 只是
COOKIE 数据和 REQUEST_METHOD。

--接受-无
如果给定,haserl 将不会在处理前将标准输入解析为 http 内容
剧本。 如果从另一个 haserl 脚本调用一个 haserl 脚本,这很有用。

-调试
打印出将要执行的脚本,而不是执行脚本。 如果
设置了环境变量“REQUEST_METHOD”,数据与
纯文本/文本内容类型。 否则,shell 脚本将逐字打印。

--外壳=路径规范
指定要使用的替代类 bash 外壳。 默认为“/ bin / sh的"

要包含 shell 参数,请不要使用 --shell=/ bin / sh的 格式。 相反,使用
没有“=”的替代格式,如在 --shell 中“/ bin / bash --norc”。一定要
引用选项字符串以保护任何特殊字符。

如果使用 Lua 库编译,则字符串“lua”用于使用集成的
路亚 vm。 此字符串区分大小写。 例子: --外壳=月亮

另一种选择是“luac”。 这会导致 haserl 和 lua 解析器被禁用,
并且脚本被假定为一个预编译的 lua 块。 看 联合航空器 下面更多
信息。

- 沉默的
Haserl 通常会在错误情况下打印信息性消息。 这个
禁止显示错误消息,因此不会公布 haserl 的使用。

--上传目录=目录
默认为“/ tmp目录”。所有上传的文件都是在这个临时文件名中创建的
目录 HASERL_xxx_路径 包含临时文件的名称。 FORM_xxx_名称
包含文件的原始名称,由客户端指定。

--上传处理程序=路径规范
指定时,文件上传由此处理程序处理,而不是写入
临时文件。 必须给出完整的路径规范(不搜索 PATH),并且
上传处理程序被赋予一个命令行参数:FIFO 的名称
上传文件将被发送。 此外,处理程序可能会收到 3
环境变量: 内容类型, 文件名您的姓名. 这些反映了 MIME
内容的内容处置标头。 Haserl 将为每个处理程序分叉
文件上传,并将上传文件的内容发送到指定的FIFO。
Haserl 将阻塞直到处理程序终止。 此方法适用于专家
只。

--上传限制=限制
允许一个 mime 编码的文件最多 限制 KB 要上传。 默认是 0KB (不
允许上传)。 请注意,mime-encoding 会增加 33% 的数据大小。

产品特点 OF 我们的业务


一般来说,web服务器设置了几个环境变量,然后使用 or
运行 CGI 脚本的另一种方法。 如果脚本使用 哈塞尔 口译员
发生以下情况:

If 哈塞尔 安装 suid root,然后将 uid/gid 设置为脚本的所有者。

环境被扫描 HTTP_COOKIE,这可能是由网络设置的
服务器。 如果存在,则将解析的内容放置在本地环境中。

环境被扫描 REQUEST_METHOD,这是由 Web 服务器设置的。
基于请求方法,读取和解析标准输入。 解析的
内容放置在本地环境中。

脚本被标记化,解析 哈塞尔 来自原始文本的代码块。 原始文本是
转换为“echo”语句,然后将所有令牌发送到子shell。

哈塞尔 叉子和一个子外壳(通常 / bin / sh的) 开始。

所有令牌都发送到子外壳的 STDIN,尾随 出口 命令。

当子shell终止时, 哈塞尔 解释器执行最终清理和
然后终止。

客户 INPUT


哈塞尔 解释器将解码通过 HTTP_COOKIE 环境变量发送的数据,并且
来自客户端的 GET 或 POST 方法,并将它们存储为可以
可以通过 haserl 访问。 变量的名称遵循源中给出的名称,
除了前缀( 造台 _) 是前置的。 例如,如果客户端发送“foo=bar”,
环境变量是 FORM_foo=酒吧.

对于 HTTP_COOKIE 方法,变量也使用前缀 ( COOKIE_) 添加。
例如,如果 HTTP_COOKIE 包含“foo=bar”,则环境变量为
COOKIE_foo=酒吧.

对于 GET 方法,以 %xx 形式发送的数据被转换为它们的字符
表示,变量也用前缀 ( 的GET_) 添加。 例如,如果
QUERY_STRING 包含“foo=bar”,环境变量为 获取_foo=酒吧.

对于 POST 方法,变量也使用前缀 ( 解决方案&帖子_) 添加。 为了
例如,如果帖子流包含“foo=bar”,则环境变量为 POST_foo=酒吧.

此外,对于 POST 方法,如果使用 多部分/表单数据 编码,
数据自动解码。 这通常用于从网络上传文件时
客户使用.

注意 当一个文件被上传到网络服务器时,它被存储在 上传目录
目录。 FORM_变量_名称= 包含上传文件的名称(如
由客户指定。) HASERL_变量_路径= 包含文件名
上传目录 保存上传的内容。 防止恶意客户端
填满 上传目录 在您的 Web 服务器上,仅当
--上传限制 选项用于指定可以上传多大的文件。 哈塞尔
脚本完成后自动删除临时文件。 为了保持
文件,移动它或在脚本中的某处重命名它。

请注意,文件名存储在 哈塞尔_变量路径 这是因为 FORM_,
GET_ 和 POST_ 变量可由客户端修改,恶意客户端可以
使用名称设置第二个变量 变量路径=/ etc / passwd文件. 早期版本
没有存储路径规范 哈塞尔 命名空间。 保持 落后
兼容性, 姓名 of 临时 文件 is 存储 in FORM_变量=
POST_变量=。 本篇 is 考虑 不安全 应该 不能 be 用过的。

如果客户端发送数据 通过 POST 和 GET 方法,然后 哈塞尔 只会解析
对应的数据 REQUEST_METHOD 由 Web 服务器设置的变量,除非
全都接受 选项已设置。 例如,一个通过 POST 方法调用的表单,但有一个
some.cgi?foo=bar&otherdata=something 的 URI 将解析 POST 数据,并且 FOO
其他数据 变量被忽略。

如果 Web 服务器定义了一个 HTTP_COOKIE 环境变量,cookie 数据被解析。
Cookie 数据被解析 before GET 或 POST 数据,所以在出现两个变量的情况下
同名,GET 或 POST 数据会覆盖 cookie 信息。

当从不同来源发送同一变量的多个实例时,
FORM_variable 将根据处理变量的顺序进行设置。
HTTP_COOKIE 总是首先被处理,然后是 REQUEST_METHOD。 如果全部接受
已设置选项,则先处理 HTTP_COOKIE,然后是方法 not
由 REQUEST_METHOD 指定,后跟 REQUEST_METHOD。 最后一个实例
变量将用于设置 FORM_variable。 注意变量也是分开的
创建为 COOKIE_variable、GET_variable 和 POST_variable。 这允许使用
每个来源的重叠名称。

当同一个变量的多个实例从同一个源发送时,只有最后一个
一个被保存。 要保留所有副本(例如,对于多选),请在末尾添加“[]”
的变量名。 将返回所有结果,以换行符分隔。 例如,
host=Enoch&host=Esther&host=Joshua 结果是“FORM_host=Joshua”。
host[]=Enoch&host[]Esther&host[]=Joshua 结果为“FORM_host=Enoch\nEsther\nJoshua”

语言


以下语言结构被识别 哈塞尔.


<% [shell 脚本] %>

<% %> 标记所包含的任何内容都将发送到子 shell 以供执行。 文本
是逐字发送的。

包括
<%in pathspec %>

在此脚本中逐字包含另一个文件。 该文件包含在脚本中
最初被解析。

评估
<%= 表达式 %>

打印外壳表达式。 “echo expr”的语法糖。

评论
<%#评论%>

评论区。 注释块中的任何内容都不会被解析。 注释可以嵌套
并且可以包含其他haserl 元素。

示例


警告
下面的例子被简化以展示如何使用 哈塞尔. 你应该
使用前熟悉基本的网页脚本安全 哈塞尔 (或任何脚本
语言)在生产环境中。

简易 命令
#!/usr/local/bin/haserl
内容类型:文本/纯文本

<%# 这是一个示例“env”脚本 %>
<%环境%>

打印结果 ENV 命令作为 mime 类型的“文本/纯文本”文档。 这是
哈塞尔 普通版 打印环境 cgi.cgi

循环 动态 产量
#!/usr/local/bin/haserl
内容类型:文字/ html




<% for a in Red Blue Yellow Cyan; 做%>
"><% echo -n "$a" %>
<% 已完成 %>




向客户端发送一个 mime 类型的“text/html”文档,带有一个 html 表
用背景颜色标记的元素。

使用 定义 功能。
#!/usr/local/bin/haserl
内容类型:文本/html

<% #定义一个用户函数
表元素(){
回声" 1 美元”
}
%>



<% for a in Red Blue Yellow Cyan; 做%>
<% table_element $a %>
<% 已完成 %>




与上面相同,但使用 shell 函数而不是嵌入的 html。

引用 CGI a 申请
#!/usr/local/bin/haserl
内容类型:文本/html


样本表格
" method="GET">
<% # 对 FORM_textfield 做一些基本的验证
# 防止常见的网络攻击
FORM_textfield=$( echo "$FORM_textfield" | sed "s/[^A-Za-z0-9 ]//g" )
%>
<输入类型=文本名称=文本字段
Value="<% echo -n "$FORM_textfield" | tr az AZ %>" cols=20>




打印表格。 如果客户端在表单中输入文本,则重新加载 CGI(定义
by $SCRIPT_NAME) 并且对文本字段进行消毒以防止网络攻击,然后
表单将重新显示用户输入的文本。 文本是大写的。

上传 a 文件
#!/usr/local/bin/haserl --upload-limit=4096 --upload-dir=/ tmp目录
内容类型:文本/html


" method=POST enctype="multipart/form-data" >



<% if test -n "$HASERL_uploadfile_path"; 然后 %>

您上传了一个名为<% echo -n $FORM_uploadfile_name %> 的文件,它是
.作为临时存储在服务器上。 这
文件是 <% cat $HASERL_uploadfile_path | wc -c %> 字节长。
<% rm -f $HASERL_uploadfile_path %> 别担心,文件刚刚被删除
从网络服务器。
<% 其他 %>
您还没有上传文件。
<% fi %>



显示允许文件上传的表单。 这是通过使用
--上传限制 并通过设置表格 编码多部分/表单数据。 如果
客户端发送一个文件,然后打印有关该文件的一些信息,然后
删除。 否则,表单会声明客户端尚未上传文件。

RFC-2616 一致性
#!/usr/local/bin/haserl
<% echo -en "content-type: text/html\r\n\r\n" %>

...


为了完全符合 HTTP 规范,头应该使用
CR+LF,而不是普通的 unix LF 行终止。 上面的语法可以
用于生成符合 RFC 2616 的标头。

环境


除了从web服务器继承的环境变量外,还有以下
环境变量总是在启动时定义:

哈瑟尔
哈塞尔 版本 - 一个信息标签。

SESSIONID
在 CGI 的生命周期内唯一的十六进制标记(它在
cgi开始; 并且在生成另一个 POST 或 GET 查询之前不会更改。)

HSERL_ACCEPT_ALL
如果 - 全都接受 标志被设置, -1, 除此以外 0.

HSERL_SHELL
shell 的名称 haserl 开始在其中运行子 shell 命令。

HSERL_UPLOAD_DIR
目录haserl 将用于存储上传的文件。

HSERL_UPLOAD_LIMIT
允许从客户端发送到服务器的 KB 数。

这些变量可以在脚本中修改或覆盖,尽管
以“HASERL_”开头的信息仅供参考,不影响正在运行的脚本。

安全 特点


有很多关于使用 shell 编写 CGI 脚本的危险的文献。
哈塞尔 包含 一些 减轻这种风险的保护措施。

环境 变量
填充环境变量的代码超出了子程序的范围
贝壳。 它解析字符? 和 &,所以客户更难做到
“注入”攻击。 举个例子, foo.cgi?a=测试;猫 / etc / passwd文件 可能导致
被赋值的变量 test 然后是运行结果
/ etc / passwd文件 发送给客户端。 哈塞尔 将为变量分配完整的
值: 测试;猫 / etc / passwd文件

在 shell 脚本中使用这个“危险”变量是安全的,方法是将它包含在
引号; 尽管应该对所有输入字段进行验证。

特权 删除
如果安装为 suid 脚本, 哈塞尔 将其 uid/gid 设置为所有者的
剧本。 这可用于拥有一组具有各种不同功能的 CGI 脚本。
特权。 如果 哈塞尔 未安装二进制文件 suid,则 CGI 脚本将
使用 Web 服务器的 uid/gid 运行。

拒绝 命令 线 参数 特定 on 网址
如果 URL 不包含未编码的“=”,则 CGI 规范说明选项
将用作程序的命令行参数。 例如,根据
到 CGI 规范: http://192.168.0.1/test.cgi?--upload-limit%3d2000&foo%3dbar
除了设置“Foo=bar”外,还应将上传限制设置为 2000KB。 保护
针对允许自己上传的客户, 哈塞尔 拒绝任何命令行选项
超越 argv[2]。 如果作为 #! 脚本,解释器是 argv[0],所有
#! 中列出的命令行选项行被组合成 argv[1],并且
脚本名称是 argv[2]。

LUA


如果用lua支持编译, --shell=lua 将启用 lua 作为脚本语言
bash 外壳。 环境变量(SCRIPT_NAME、SERVER_NAME 等)放在
ENV 表,表单变量放在 FORM 表中。 例如,
上面的自引用形式可以这样写:

#!/usr/local/bin/haserl --shell=lua
内容类型:文本/html


样本表格
" 方法="获取">
<% # 对 FORM_textfield 做一些基本的验证
# 防止常见的网络攻击
FORM.textfield=string.gsub(FORM.textfield, "[^%a%d]", "")
%>
<输入类型=文本名称=文本字段
值="<% io.write (string.upper(FORM.textfield)) %>" cols=20>




<%= 操作符是语法糖 写入 (字符串( ... )) 因此,例如,
Value= 上面的行可以写成: 值="<%= string.upper(FORM.文本字段) %>" 列=20>

haserl lua 脚本可以使用该功能 haserl.加载文件(文件名) 处理目标
脚本作为 haserl (lua) 脚本。 该函数返回一种“函数”类型。

例如,

酒吧.lsp
<% io.write("Hello World") %>

您的消息是 <%= gvar %>

-- 包含文件结束 --

foo.haserl
#!/usr/local/bin/haserl --shell=lua
<% m = haserl.loadfile("bar.lsp")
gvar = "以 m() 运行"
m()

gvar = "一步加载并运行"
haserl.loadfile("bar.lsp")()
%>

运行 FOO 将产生:

你好世界
您的消息是 Run as m()
-- 包含文件结束 --
你好世界
您的消息是加载并一步运行
-- 包含文件结束 --

此功能可以嵌套 haserl 服务器页面 - 页面片段
由 haserl 标记器处理。

联合航空器


卢亚克 “shell”是一个预编译的lua块,所以脚本的交互式编辑和测试
不可能。 但是,haserl 只能在 luac 支持下编译,这允许
即使在小内存环境中也支持lua。 上面列出的所有 haserl lua 功能都是
仍然可用。 (如果 luac 是唯一内置到 haserl 中的 shell,则 haserl.loadfile 是
已禁用,因为未编译 haserl 解析器。)

这是一个简单的脚本示例,转换为 luac cgi 脚本:

鉴于文件 test.lua:
打印(“内容类型:text/plain0)
打印(“您这次运行的 UUID 是:” .. ENV.SESSIONID)

它可以用 luac 编译:
luac -o 测试.luac -s 测试.lua

然后将 haserl 标头添加到其中:
echo '#!/usr/bin/haserl --shell=luac' | 猫 - test.luac > luac.cgi

或者,可以使用标准的 lua shell 开发整个网站,
然后让 haserl 本身对 luac 编译器的脚本进行预处理,作为
构建过程。 为此,请使用 --shell=lua 并开发网站。 准备构建时
运行时环境,将 --debug 行添加到您的 lua 脚本,并运行它们输出
结果到 .lua 源文件。 例如:

鉴于 haserl 脚本 test.cgi:
#!/usr/bin/haserl --shell=lua --debug
Content-Type:text / plain

您这次运行的 UUID 是 <%= ENV.SESSIONID %>

预编译、编译并添加 haserl luac 头文件:
./test.cgi > test.lua
luac -s -o 测试.luac 测试.lua
echo '#!/usr/bin/haserl --shell=luac' | 猫 - test.luac > luac.cgi

使用 onworks.net 服务在线使用 haserl


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    移相器
    移相器
    Phaser 是一个快速、免费且有趣的开放式
    源 HTML5 游戏框架,提供
    WebGL 和 Canvas 渲染
    桌面和移动网络浏览器。 游戏
    可以共...
    下载移相器
  • 2
    附庸引擎
    附庸引擎
    VASSAL 是一个游戏引擎,用于创建
    电子版传统板
    和纸牌游戏。 它提供支持
    游戏块渲染和交互,
    和...
    下载 VASSAL 引擎
  • 3
    OpenPDF - iText 的分支
    OpenPDF - iText 的分支
    OpenPDF 是一个 Java 库,用于创建
    以及使用 LGPL 编辑 PDF 文件和
    MPL 开源许可证。 OpenPDF 是
    iText 的 LGPL/MPL 开源继承者,
    一个...
    下载 OpenPDF - iText 的分支
  • 4
    SAGA GIS
    SAGA GIS
    SAGA - 自动化系统
    地球科学分析 - 是地理
    信息系统 (GIS) 软件
    地理数据的强大功能
    加工和分析...
    下载 SAGA GIS
  • 5
    Java/JTOpen 工具箱
    Java/JTOpen 工具箱
    IBM Toolbox for Java / JTOpen 是一个
    Java类库支持
    客户端/服务器和互联网编程
    模型到运行 OS/400 的系统,
    i5/OS, 哦...
    下载 Java/JTOpen 工具箱
  • 6
    D3.js
    D3.js
    D3.js(或数据驱动文档的 D3)
    是一个 JavaScript 库,它允许你
    生成动态的交互式数据
    Web 浏览器中的可视化。 与D3
    您...
    下载 D3.js
  • 更多 ”

Linux 命令

Ad