Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
mathiasm
HV vaatleja

liitunud: 06.05.2010
|
23.05.2013 10:23:36
PHP upload - failiõigused |
|
|
Tegin upload vormi: http://kobras.ee/upload - kõik toimib ilusti, kuid failid on serveris "0600" õigustega ning seetõttu ei saa neid veebiliidese kaudu vaadata
(ehk siis: uploadin akvaarium4.jpg, see liigutatakse kausta /failid ning kui sisestan URL-i http://kobras.ee/upload/failid/ , siis näen seal küll akvaarium4.jpg-d, kuid ei saa seda avada (kuna "others:read" õigus puudub)
Ma tahaks teada, kas seda on võimalik koodi muutmise teel parandada, või peaks veebiteenusepakkuja (ELION) kuidagi sekkuma?
Php-upload, mida kasutan, on tehtud täpselt selle näite eeskujul: http://www.w3schools.com/php/php_file_upload.asp
(seesama index.php fail töötab teise veebiserverisse (haldaja RADICENTER) kopeerituna hästi ning seal on failiõigused "0644", mistõttu on nende vaatamine brauseris võimalik)
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
mathiasm
HV vaatleja

liitunud: 06.05.2010
|
23.05.2013 12:45:20
|
|
|
Teoorias võiks see olla väga hea lahendus, kuid millegipärast ei tööta - õigused on endised pärast uploadimist
Kood on mul selline:
(chmod isegi kahes kohas kirjeldatud, kuskil ei toimi)
<?php
$info = "";
$allowedExts = array("gif", "jpeg", "jpg", "png", "zip", "rar", "doc", "docx", "ddoc", "ddocx", "txt", "pdf");
$fileName = $_FILES['file']['name'];
$extension = strtolower(end(explode(".", $fileName)));
$fileType = $_FILES["file"]["type"];
$fileSize = $_FILES['file']['size'];
$fileTmp = $_FILES['file']['tmp_name'];
if(!$fileName)
{
$error = 'Vali fail, mida soovid laadida!';
}
elseif(($fileType != "image/gif") && ($fileType != "image/jpeg") && ($fileType != "image/jpg") && ($fileType != "image/pjpeg") && ($fileType != "image/x-png") && ($fileType != "image/png") && ($fileType !="application/x-rar-compressed") && ($fileType !="application/octet-stream.zip") && ($fileType !="application/multipart/x-zip") && ($fileType !="application/zip") && ($fileType !="application/octet-stream") && (fileType != "application/msword") && ($fileType != "text/plain") && ($fileType !="application/pdf") && ($fileType !="application/x-pdf") && ($fileType !="application/acrobat") && ($fileType !="applications/vnd.pdf") && ($fileType !="text/pdf") && ($fileType !="text/x-pdf"))
{
$error = 'Keelatud faili tüüp!';
}
elseif(!in_array($extension, $allowedExts))
{
$error = 'Keelatud faili tüüp!';
}
elseif($fileSize > 200000000)
{
$error = 'Fail on lubatust suurem! (max 195,312 Kb)';
}
elseif(file_exists("failid/" . $fileName))
{
$error = 'Fail "'.$fileName.'" on juba serveris olemas!';
}
/** OPTIONAL */
elseif($_FILES["file"]["error"])
{
$error = "Error: " . $_FILES["file"]["error"];
}
if($error == true)
{
echo $error;
}
else
{
$info .= "Nimi: " . $fileName . "<br />";
$info .= "Tüüp: " . $fileType . "<br />";
$info .= "Suurus: " . ($fileSize / 1024) . " kB <br />";
$info .= "Talletan: " . $fileTmp . "<br />";
echo "FAIL ON EDUKALT SERVERISSE LAETUD! <br /><br /> FAILI INFO: <br /> " . $info;
chmod('failid/', 0644);
move_uploaded_file($fileTmp, "failid/" . $fileName);
}
chmod ($filename ,"0644")
?> |
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
23.05.2013 13:32:16
|
|
|
viimane chmod peaks vist olema chmod ("failid/" . $filename ,"0644")
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
23.05.2013 15:15:33
|
|
|
Ja kaust kallal pole üldse vaja näppida, sa ju hiljem ei muuda seda chmod väiksemaks, siis igakord pole vaja üle käia.
tsitaat: |
viimane chmod peaks vist olema chmod ("failid/" . $filename ,"0644") |
ja kui see ka ei aita, mine vaata, kas sul ftp s lastakse failiõigusi muuta? Siis võid seda katsetada
http://php.net/manual/en/function.ftp-chmod.php
Kas teenusepakkuja midagi .htaccess faili ei saa kirjutada, et selliselt käitub server? Vaata see üle.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
23.05.2013 15:24:24
|
|
|
Tegelikult käitub teenusepakkuja server täiesti korrektselt. Temp failides võib igasugust huvitavat infot olla ja eriti shared hostingu puhul pole see teps mitte hea kui üks kasutaja teise kasutaja temp faile saab näppida.
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
23.05.2013 15:33:40
|
|
|
Kas sain valesti aru? Ma sain aru, et ta ei saa vaadata juba üleslaetud pilte mitte temp kausta / temp faile .
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
23.05.2013 16:01:54
|
|
|
Just, aga kui ta liigutas faili temp kaustast mujale ja õigusi ei muutnud, siis jäid ikka samad õigused mis seal temp kaustas olid.
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mathiasm
HV vaatleja

liitunud: 06.05.2010
|
24.05.2013 10:11:35
|
|
|
napoleon kirjutas: |
viimane chmod peaks vist olema chmod ("failid/" . $filename ,"0644") |
Kui ma sellist kuju proovisin, juhtus järgnev: failid kaust muutus ligipääsmatuks ning uploader ei suutnud sinna enam faile kopeerida. Ka veebi kaudu ei saanud ligi. FTP kliendis olid kaustaõigused justkui OK, kaust aga näiliselt tühi; tegelikult oli seal sees .htaccess fail (Options +Indexes sisuga), seetõttu ei saa kausta kustutada ka. Proovisin skripti uues kaustas ja juhtus sama.
See idee tundub tore - proovisin, vist TOIMIKS, aga kus/kuidas ma oma FTP logimisandmed (server, username, password) annan, kas sellessamas koodis muutujate $ftp_server, $ftp_user_name, $ftp_user_pass asemel, nagu järgnevas näites? Proovisin, millegipärast tulemuseks "could not chmod", kuid vähemalt failinimi on õige, millel õigusi muutma peaks.
<?php
$file = "failid/" . $fileName;
// set up basic connection
$conn_id = ftp_connect(la01.neti.ee);
// login with username and password
$login_result = ftp_login($conn_id, minukasutajanimi, minuparool);
// try to chmod $file to 644
if (ftp_chmod($conn_id, 0644, $file) !== false) {
echo "$file chmoded successfully to 644\n";
} else {
echo "could not chmod $file\n";
}
// close the connection
ftp_close($conn_id);
?> |
NB: Käsitsi FTP-cliendi kaudu failiõiguste muutmine toimib!
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
24.05.2013 10:40:38
|
|
|
Njaah, arenduse ajal on kasulik error reporting notice peale lülitada, siis oleksid selle näpuka avastanud. Muutujate nimed on case sensitive, seega õige oleks:
chmod ("failid/" . $fileName ,"0644")
aga kui juba kataloogi õigused sinnasamusesse keerasid, proovi koodist, ehk saad nii korda:
chmod ("failid/","0755")
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mathiasm
HV vaatleja

liitunud: 06.05.2010
|
24.05.2013 10:50:00
|
|
|
napoleon kirjutas: |
Njaah, arenduse ajal on kasulik error reporting notice peale lülitada, siis oleksid selle näpuka avastanud. Muutujate nimed on case sensitive, seega õige oleks:
chmod ("failid/" . $fileName ,"0644")
aga kui juba kataloogi õigused sinnasamusesse keerasid, proovi koodist, ehk saad nii korda:
chmod ("failid/","0755") |
Aitäh tähelepanu juhtimast, aga vaatasin koodi üle - mul ongi igal pool see $fileName suur N-ga;
Muud "chmodid" olen praeguseks koodist eemaldanud, on ainult see FTP-kaudu muutev skript on hetkel see, mille loodaks käima saada.
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
24.05.2013 10:55:10
|
|
|
Proovi ilma ftp-ta, tee lihtsalt selline php fail
php:
|
<?php chmod ("failid/", "0755"); ?>
|
kui sa ownerit ei torkinud, peaks selle skripti ühekordne käivitamine asja korda tegema
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mathiasm
HV vaatleja

liitunud: 06.05.2010
|
04.06.2013 13:50:29
|
|
|
napoleon kirjutas: |
Proovi ilma ftp-ta, tee lihtsalt selline php fail
php:
|
<?php chmod ("failid/", "0755"); ?>
|
kui sa ownerit ei torkinud, peaks selle skripti ühekordne käivitamine asja korda tegema |
Oeh.. Panin käsu käima. Tulemus: Kausta chmod-iks saab 0000, kustutada enam ftp kaudu ei lase ja kausta sisu ei saa vaadata samuti (brauseris pole õigusi, ftp-kaudu näitab, et kaust tühi); failiõigusi ei saa ka ftp kaudu vahetada (järelikult ownership läinud?) - igatahes kaos.
Kuidas ma selle asja tööle saaks? Kuidas saab üks nii elementaarne asi nii võimatu olla?
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
04.06.2013 20:57:01
|
|
|
tsitaat: |
<?php
chmod ("failid/","0755");
?> |
ära ole teiste antud koodis nii kinni, mine loe php manuali.
chmod antakse ette numbrina mitte stringina
Küllap string loetakse nulliks ja saidki chmod 000 kaustale.
Lase õigesti kirjutatud kood php s käima, muudab kausta õigeks.
Või kas see ongi selliselt üldse enam võimalik, kuna chmod on 000 ? Faili/kausta omanikul (st. php koodil) puudub ju ka igasugune õigus seda muuta nüüd.
väljavõte php manualist siis
tsitaat: |
<?php
chmod("/somedir/somefile", 755); // decimal; probably incorrect
chmod("/somedir/somefile", "u+rwx,go+rx"); // string; incorrect
chmod("/somedir/somefile", 0755); // octal; correct value of mode
?> |
ma kahjuks ei pannud ka ennem tähele seda, juba esimeses vastuses oli viga sees.
Edit...
vaatan, et see esimene vigane kood ongi su enda tehtud ja teised kopeerivad ei pane ka tähele.
Veidi teemast mööda ka siis, olen ise ka kokku puutunud sellega, et kui lasta koodil kaustu või faile teha ja talle piisavalt õigusi ei anna, siis ftp ga ligi ei lase, kuidas seda probleemi lahendada? Kas ainult koodiga õigusi muutes või saab ikkagi kuidagi ka läbi ftp või admin paneeli?
Näiteks teevad paljud cms selliseid kaustu, mida hiljem ei saa kustutada läbi ftp
Uurisin siis väheke teemat. Kui sul on se kaust/fail lukus ja ftp kaudu ligi ei saa, siis lähed Direct Admin kaudu File Manager ja seal teed selle Kausta/failile Reset Owner, peale seda saad juba asju muuta läbi ftp või ka sealt samast filemanager´ist.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
mathiasm
HV vaatleja

liitunud: 06.05.2010
|
05.06.2013 09:51:06
|
|
|
Aitäh Sulle kogu selgitava teksti ja jutumärkidele tähelepanu juhtimise eest - nüüd enam tõesti ei keera kaustaõigusi nässu, kuid kausta sees olevaid faile kahjuks ikka ei näe, kuna tundub, et need õigused antakse ainult kaustale, mitte rekursiivselt seal sees olevatele failidele. Huvitav, kas seda saaks kuidagi force'da?
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
tiitise
HV kasutaja
liitunud: 04.03.2005
|
05.06.2013 10:18:39
|
|
|
mathiasm kirjutas: |
Aitäh Sulle kogu selgitava teksti ja jutumärkidele tähelepanu juhtimise eest - nüüd enam tõesti ei keera kaustaõigusi nässu, kuid kausta sees olevaid faile kahjuks ikka ei näe, kuna tundub, et need õigused antakse ainult kaustale, mitte rekursiivselt seal sees olevatele failidele. Huvitav, kas seda saaks kuidagi force'da? |
Üks võimalus oleks kausta all olevad failid läbi skännida ja kõigile õigused anda.
Teine võimalus oleks kasutada system käsku -> system("chmod -R 755 /kausta/asukoht/");
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
 |
mathiasm
HV vaatleja

liitunud: 06.05.2010
|
05.06.2013 11:19:13
|
|
|
EDIT:
tsitaat: |
Üks võimalus oleks kausta all olevad failid läbi skännida ja kõigile õigused anda.
Teine võimalus oleks kasutada system käsku -> system("chmod -R 755 /kausta/asukoht/"); |
Proovin kohe system-käsku!
Kuidas muidu seda "esimest võimalust" praktikas rakendada?
EDIT2: lõpuks ometi töötab! Suur aitäh! system("chmod -R 755 ./failid/"); ja kõik toimib!
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
tiitise
HV kasutaja
liitunud: 04.03.2005
|
05.06.2013 13:31:44
|
|
|
Juhul kui keegi ei taha süstem käsku kasutada siis saab ka sellise funktsiooniga hakkama:
php:
|
function chmodr($path, $filemode) { return chmod($path, $filemode); while (($file = readdir($dh)) !== false) { if($file != '.' && $file != '..') { $fullpath = $path.'/'.$file; return FALSE; elseif(! is_dir($fullpath) && ! chmod($fullpath, $filemode)) return FALSE; elseif(!chmodr($fullpath, $filemode)) return FALSE; } } if(chmod($path, $filemode)) return TRUE; else return FALSE; }
|
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
 |
|