PHP FTP Server güvenliğini sağlamak bağlantı

4 Cevap php

Bu soru this question, ben FTP Server güvenliğini bağlanmaya çalışıyorum ve bağlanmak mümkün değil uygun olduğunu, garip kısmı ben denediğimde ssh yapmak ve sunucuya bağlanmak mümkün ama olduğunu Birkaç farklı yaklaşımlar kullanılarak ama çalışmıyor php kod bunu yapmak için

Yaklaşımları:

  1. FTP Wrappers
  2. ftp_connect & ftp_login
  3. ftp_ssl_connect
  4. ssh2_sftp
  5. ssh2-scp-send & ssh2-scp-receive - ama yorumlar kısmında önerilen henüz bu yaklaşımı denemedim ve bu yüzden bu konuda çalışacak ve daha sonra güncellemeleri yayınlayacağız.

Code for Approach 1:

$ftp_server = "ftp://username:password@192.168.1.1:21/{$log_file_name}";
$opts = array('ftp' => array('overwrite' => TRUE));
$context = stream_context_create($opts);
$put_file = file_put_contents($ftp_server, $response, LOCK_EX,$context);

Burada da FTP Server güvenliğini bağlamak mümkün değilim, o bağlamak mümkün değil neden olarak herhangi bir öneriniz?

Code for Approach 2:

ftp_server = 'www.server.com';
$conn_id = ftp_connect($ftp_server) or die ("Cannot connect to host");
//Program dies out here and give error message "Cannot connect to host",
//but why ftp_login does not work here, Any Suggestions ?
$ftp_user_name = "login";
$ftp_user_pass = "password";
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection and login result
if ((!$conn_id) || (!$login_result)) 
{ echo "FTP connection has encountered an error!";
  echo "Attempted to connect to $ftp_server for user $ftp_user_name....";
 //exit;
} else 
{ 
 echo "Connected to $ftp_server, for user $ftp_user_name".".....";
}

Code for Approach 3:

Here am using same code as approach 1 but instead of ftp_connect, am using ftp_ssl_connect

Code for Approach 4:

$connection = ssh2_connect('www.server.com', 22);
ssh2_auth_password($connection, 'login', 'password');
$sftp = ssh2_sftp($connection);
//exit();
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');

Neden yaklaşımlar yukarıda kullanarak FTP Server güvenliğini bağlanmak mümkün değilim ama yine ssh kullanarak bunu yapmak mümkün duyuyorum kimse tavsiye?

Php kullanarak FTP Server güvenliğini bağlanmak için başka yaklaşımlar var mı?

UPDATE:

Q1. Ben ftp_connect kullanarak tekrar denedim ama sadece dışarı öldü ve neden ölür etmez ftp_connect ölür hangi senaryolar nelerdir?

Q2. sadece bu sunucuya bağlanmak için yaklaşımlar var mı yoksa biz uygulamak hangi başka var mı?

Q3. güvenli FTP bağlantısı desteklemiyor ilgili bu php dil ​​midir? OR Bu kullanarak php yapmanın başka bir yolu çok yararlı olacağı gibi farklı yaklaşımlar sağlamak yapmak evet ise daha vardır.

UPDATE 1:

Ben bu konuda daha fazla google çalışıyordu ve ftp_connect güvenlik duvarı daha işe yaramazsa bunun için nedenlerden biri olabilir gibi görünüyor. Ben bu durumda ise tamamen emin değilim ama üzerinde daha fazla araştırma ve ben yararlı bir şey bulursam burada bir güncelleme yayınlayacağız ediyorum.

Possible Solution :

Problem

Ben "ya da öl" kaldırın o zaman hata alıyorum:

When running from a webpage: "Warning: ftp_login() expects parameter 1 to be resource, boolean given in /var/www/ftp_test.php on line 28"

var_dump ($ conn); iadeler bool (false).

Komut satırından / usr / bin / php / var / www / ftp_test.php

var_dump ($ conn); iadeler kaynak (4) tipi (FTP Buffer) arasında.

Komut tamamlar.

Solution 1

Bu bir olmak solution olabilir:

Geçici veya kalıcı olarak kapatmak için selinux and here is the way or Search : How to disable selinux kapatmak için çalışın.

Solution 2

Tamamen SELinux'u kapatmak istemiyorsanız, size sadece setsebool komutunu kullanarak httpd_can_network_connect ayarlayarak ne gerek alabilirsiniz.

Verify that it was previously set to "off": getsebool httpd_can_network_connect

Set it to "on": setsebool httpd_can_network_connect=1

Turn selinux back on: setenforce 1

Httpd'de altında çalışırken hala çalışıyor emin php ftp_connect olmak için kontrol edin.

Set the policy (-P) to "on" so it persists over a reboot: setsebool -P httpd_can_network_connect=1

Solution 3

Ayrıca şirket güvenlik duvarı ile sorun var olabilir. Emin olun düzgün yapılandırılmış ve var olan erişim hakları düzgün ayarlanmış.

Solution 4

Diğer bir yaklaşım, bu protokoller çok farklı tipleri ile sunucuları birçok farklı türde bağlamak ve iletişim kurmak için kullanılabilir olarak cURL : libcurl kullanmaktır

Solution 5

PHP Secure Communication Library (phpspeclib), hangi zamanda FTP Server güvenli bağlantı kurmak için kullanılan sözde açık kaynak kodlu bir proje var.

Comments:

Google / bing yapıyor denedim ama herhangi bir verimli sonuçlar var değil ve SO Okuyucular :-) yardımcı olabilir eğer öyleyse kesinlikle seviniriz

Gerçekten cevap arıyorum.

4 Cevap

Şifreli bağlantıları ile uğraşırken ben de sorunları oldukça çok karşılaştı.

Ilk şey kullanmak isteyen protokolünü kontrol etmektir. Güvenli FTP en yaygın SHH üzerinde FTP refearing ama aynı zamanda SCP, SFTP veya FTPS anlamına gelebilir.

Anlamaya bir yolu filezilla gibi bir istemci kullanarak bağlantı kontrol etmektir.

Protokol bir PHP modülü üzerinden işlenir, iyi yaklaşım kullanmak, gerçekten. Bu durumda, protokol ile ilgili bir ek olarak, openssl modül php için yüklü, emin olmak gerekir.

Modül destek hala çalışmayacak bazı durumlar vardır. Bu durumda, libcurl modülü kullanarak bir seçenektir. Bir istemci sertifikası kullanmak gerektiğinde bu örneği için böyledir.

Ne yazık ki, burada yine, nedeniyle php modülü libcurl kısmi destek için bazı sorunlarla karşılaşabilirsiniz. Sunucu sertifikası modülü tarafından geçersiz yargılanır zaman denediği bir senaryo olduğunu.

Ben genellikle kullanmak son çözüm "-k" düğmesini kullanarak sonraki durum için, bir exec deyim kıvırmak çalıştırmanız için.

Çok ucuz 'non-dedicated server' webhosts (kötü olan) destek yok As for ´ftp via ssh´ alias ´sftp´: Hayır, doğrudan danışma, ama not. Şirket güvenlik duvarları, ilgili bağlantı noktalarını engelleyebilir.

As for 'ftp using ssl/tls' alias 'ftps': Your answer is here. ftp_ssl_connect() :-) üzerinde zaman kaybetmeyin

(Evet, bu kötü az söylemek, php sitede belgelenir)

Ben phpseclib çözüm çalıştı (http://phpseclib.sourceforge.net/sftp/intro.html) ve windows / linux çalışır.

Eğer besteci kullanıyorsanız, sadece ihtiyaç bölümünde ekleyin:

"Phpseclib / phpseclib": "0,3 * @ dev."

Ve sonra, bunu yapabilirsiniz: http://phpseclib.sourceforge.net/sftp/examples.html#put