簡體   English   中英

從 Perl CGI 執行 PHP

[英]Executing PHP from Perl CGI

首先,作為背景,我試圖在創建新實體時加密我們在服務器上的數據。 這是一個遺留系統,它起源於 Perl CGI 系統,並且有一個單獨的部分是 PHP。 Perl 部分創建組,PHP 后來實施以對其進行加密。

我正在嘗試從 Perl CGI 文件執行 PHP 加密腳本。 我試過使用:

exec("/path/to/file arg1 arg2")
system("/path/to/file arg1 arg2")
backtick operator /path/to/file arg1 arg2
open ("/path/to/file arg1 arg2 |)

我也嘗試過直接指向 /bin/php 並將文件作為參數傳遞給每個案例。 到目前為止,我唯一發生的事情是:

  1. Printing the output of exec/system... produces the Perl file (not even the php file) as text, which I haven't seen any mention of this happening anywhere else, but all I've seen is Perl, not CGI and Perl 一起。
  2. 沒有數據。 如果我 output $,從 Perl 使用系統時出現非法搜索錯誤。 但其他人將其留空。 它們都返回 0,就好像 exec/system/.. 已經運行一樣。 但服務器端沒有任何改變。

從我在網上閱讀的內容來看,我認為 CGI 可能以某種“受保護”模式運行,該模式會禁用某些文件上的 exec/system/open/backtick 命令,但不確定這是問題所在。 據我所知,沒有跡象表明權限受到限制。 如果有人有任何見解,將不勝感激。 如果您需要更多信息,請告訴我。

幾點注意事項:

  • 向我們展示實際、最小和完整的測試程序及其 output,以便我們了解您在做什么。

  • system與父程序共享它的文件句柄,所以如果外部程序向 STDOUT 發送一些東西,那就是它要去的地方。 如果那是在您發送 CGI 標頭之前,那么事情就會變得一團糟。

  • 反引號將捕獲標准 output,但不是標准錯誤。 錯誤日志中的內容可能仍為 go。

  • exec將您的程序變成其他程序。 也就是說,您的 Perl 程序進行了一些設置,然后成為您執行的東西,然后永遠不會回來(除非事情失敗)。

一些有助於調試的事情:

  • 制作一個小型 CGI 程序,它只調用另一個您知道應該可以工作的程序,例如date或類似的東西。 驗證你可以做那么多。
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
my $rc = system '/bin/date';
print "result was <$rc>";
  • 然后,運行 php 以顯示其版本。 驗證您是否可以運行 php。
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
my $rc = system '/usr/bin/php', '-v';
print "result was <$rc>";
  • 慢慢增加復雜性。 找出事情停止工作的地方。

如果您的 arguments 到 PHP 來自用戶輸入,請考慮使用污點檢查和仔細清理 ( perlsec )。 請注意,我使用system的列表版本,因此 shell 沒有機會解釋元字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM