[英]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 並將文件作為參數傳遞給每個案例。 到目前為止,我唯一發生的事情是:
從我在網上閱讀的內容來看,我認為 CGI 可能以某種“受保護”模式運行,該模式會禁用某些文件上的 exec/system/open/backtick 命令,但不確定這是問題所在。 據我所知,沒有跡象表明權限受到限制。 如果有人有任何見解,將不勝感激。 如果您需要更多信息,請告訴我。
幾點注意事項:
向我們展示實際、最小和完整的測試程序及其 output,以便我們了解您在做什么。
system
與父程序共享它的文件句柄,所以如果外部程序向 STDOUT 發送一些東西,那就是它要去的地方。 如果那是在您發送 CGI 標頭之前,那么事情就會變得一團糟。
反引號將捕獲標准 output,但不是標准錯誤。 錯誤日志中的內容可能仍為 go。
exec
將您的程序變成其他程序。 也就是說,您的 Perl 程序進行了一些設置,然后成為您執行的東西,然后永遠不會回來(除非事情失敗)。
一些有助於調試的事情:
date
或類似的東西。 驗證你可以做那么多。#!/usr/bin/perl
print "Content-type: text/plain\n\n";
my $rc = system '/bin/date';
print "result was <$rc>";
#!/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.