 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
vectorialpx
Data înscrierii: 01/Mar/2005
Mesaje: 2925
Locație: țopăi pe tasta DELETE
|
| Trimis: Joi Apr 24, 2008 12:20 am Titlul subiectului: |
|
|
Citat: @vectorialpx: omul vrea sa automatizeze, ca de asta e programator, nu sa stea sa puna o noua pagina in array de fiecare data cand mai creeaza inca una.
Adica, tu asta ai inteles nu? ca trebuie sa stea sa adune fisiere in array? :lol:
haios, pe bune... de readdir ai auzit?
chiar nu ar avea sens sa ne certam pe tema asta...
Sunt multi oameni pe forum-ul asta care mi-ar da lectii de PHP dar... nu esti in lista, imi pare rau
Citat: tu in $_GET pui numele paginilor cu tot cu extensia de PHP
nu.. eu nu fac include-uri din GET... decat daca e necesar si, sincer... stiu care sunt riscurile. Apoi eu, ca user, pot sa pun ce vreau in GET, datoria programatorului e sa imi dea posibilitati... nu sa-mi taie craca
good night! |
|
| Sus |
|
Amenthes
Data înscrierii: 12/Dec/2005
Mesaje: 391
|
| Trimis: Joi Apr 24, 2008 8:23 pm Titlul subiectului: |
|
|
@vectorialpx:
1. Da, intelesesem ca ar trebui sa construiasca manualul array-ul, si cred ca si joe_black la fel a inteles. Probabil din cauza exemplului lui MihaiC.
2. Sincer sa fiu, nu am folosit readdir in viata mea, cand am avut nevoie de lucru cu directoare aveam la dispozitie PHP5 si foloseam scandir. Acum folosesc DirectoryIterator sau celelalte clase din SPL care se ocupa de directoare.
4. La cat de des postez nu am cum sa iti dau lectii si...
5. Nu cred ca as mai avea rabdare sa explic de atatea ori
6.
Citat:
ideea mea e ca nu cel ce face site-ul lucreaza cu el... cel ce face site-ul trebuie sa se adapteze tuturor nevoilor, fara a pune clauze de genul "sa nu incluzi fisiere care contin *"
si
Citat:
Apoi eu, ca user, pot sa pun ce vreau in GET, datoria programatorului e sa imi dea posibilitati... nu sa-mi taie craca
Hai sa fiu rau... Tu ca user de ce? De site? Vrei sa iti fie lasata posibilitatea sa pui ce vrei in URL si sa mai si mearga? Caror nevoi sa se adapteze? :) Despre ce fel de user vorbesti?
In cazul in care nu ti-ai dat seama (si tind sa cred ca asa e...), berliotz incearca sa implementeze in mod minimal un pattern numit Front Controller. In cazul lui, Front Controller-ul fiind index.php, de asta are un $_GET['page']. Iar paginile de inclus nu cred ca vor putea fi create/redenumite prin vreo interfata de administrare. In cazul asta nu stiu cati vor denumiri... "neconventionale" pentru fisierele de inclus. Probabil nici tu. Daca joe_black ar fi dat un exemplu "neconventional" ai fi inceput sa spui ca nu e SEO friendly...
7.
Citat:
mie mi se pare nefunctionala varianta ta:
$myfile = basename($_GET['page']);
---> ok, iese fisier.php [sau, poate fi html.. de ce nu?]
$myfile = preg_replace('#[^a-zA-Z0-9_\-]#','',$myfile);
---> nu am inteles ideea, daca eu am un fisier cu numele "nume'neconventional asa.php" ce se intampla?
$include_path = $myfile.".php";
---> vei include fisier.php.php
if (is_readable($include_path)) {
--->eu zic ca nu va fi readable...
include ($include_path);
}
Daca se intampla asa inseama ca ai pus din greaseala intr-un href extensia de PHP, si chiar si peste asta poti trece daca folosesti al doilea parametru al basename.
8. ...ma abtin ca s-a mai spus pe forum, da un search :)
P.S. Daca atunci cand ai spus "user" te refereai la "client programmer", scuzele mele. Cred ca noi doi avem o problema de comunicare. |
|
| Sus |
|
vectorialpx
Data înscrierii: 01/Mar/2005
Mesaje: 2925
Locație: țopăi pe tasta DELETE
|
| Trimis: Joi Apr 24, 2008 9:04 pm Titlul subiectului: |
|
|
1. nu stiu ce a inteles lumea, eu am dat o solutie... daca nu s-a inteles se putea intreba
2-5. numarul de posturi nu e proportional cu cantitatea de cunostinte si, sa zicem ca m-am grabit la afirmatia cu "nu-mi dai lectii" pentru ca nu te cunosc si nu prea-mi sta-n fire sa fac comparatii in necunostinta de cauza.
referitor la postul asta, ce sa zic... multumiri [atunci si acum], nu mi-a venit ideea pe moment... daca tu zici ca mi-ai dat lectii pentru ca ai raspuns la un post, ce sa zic... ok! multumesc inca o data [era un proiect cu un css idiot care nu s-a terminat nici acum]
6. ai dreptate referitor la user... sunt de mai multe feluri doar ca eu credeam ca se subantelege. Eu ma refeream, evident, la cel ce utilizeaza script-ul tau in mod direct. User-ul ce vede si acceseaza pagina 'are nevoie' de restrictii de securitate si ATAT [daca pune fisier aiurea primeste eroare] dar tu, ca programator, realizezi o aplicatie pentru un administrator [de obicei] nu pentru user-ul final... Exista si developeri-administratori dar asta e alta afacere. Admin-ul va administra baza de date si fisiere si poate fi un 'needucat' in ale web-ului [am intalnit concret... persoana ce pune nume de fisiere cu spatii, ghilimele si litere mari]... Ideea mea e ca tu sa ai un 'raspuns' [functionalitate sau mesaj de eroare] pentru orice ar face el. Referitor la fisiere, daca server-ul ii permite sa le denumeasca, ar trebui sa-i permiti si tu... sper ca ai inteles ideea mea.
7. Citat: Daca se intampla asa inseama ca ai pus din greaseala intr-un href extensia de PHP, si chiar si peste asta poti trece daca folosesti al doilea parametru al basename.
nu ai pus al doilea parametru... :P ... in momentul asta se va intampla asa cum am scris in comentarii [basename fara parametrul doi da filename-ul cu tot cu extensie... iar tu ai readaugat-o]
Acum imi dau seama de ceva - credeam ca tot codul tau e al lui joe_black [nu am fost atent!!] si de fapt ma certam cu el :D pentru ca a dat un raspuns sec si prost "procedura inutila" si chiar m-a enervat. Acum am recitit post-urile si mi-am dat seama ca autorul scriptului care nu mi-a placut mie nu era el si d-aia comentariile au fost mai acide (nu ofer scuze pentru ca sunt pe buna-dreptate... fara aciditate :P)
8. nu m-am prins [cred ca ma supraestimezi!] banuiesc ca e o ironie...
PS: a mai scris cineva p-aici ca eu vreau ca "doar solutiile mele sa fie luate in considerare". FALS! daca alticineva da o solutie mai buna, e ok!... nu sunt guru, nu sunt as si nu le stiu pe toate.
PPS:
Citat: berliotz incearca sa implementeze in mod minimal un pattern numit Front Controller
tre sa recunosc ca sunt praf cand vine vorba de patterns, template-uri, CMS-uri etc... sunt impotriva lor desi ar trebui sa incep sa ma imprietenesc cu ele pentru ca vad ca majoritatea se bazeaza pe 'lucruri gata-facute'.. |
|
| Sus |
|
Ombladon1991
Data înscrierii: 11/Feb/2008
Mesaje: 40
|
| Trimis: Joi Apr 24, 2008 9:19 pm Titlul subiectului: |
|
|
hmm am si eu cv d genu dar eu folosesc functie ca sa deschid :D
Cod: if ($_GET['page'] == null)
{
mode(home);
}
elseif ($_GET['page'] == "o pagina")
{
mode(lol);
}
si functia :
Cod: function mode($string)
{
$filename = "files/" . stripslashes($string) . ".html";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
echo $contents;
} bft :D |
|
| Sus |
|
mihaitha
Data înscrierii: 04/Mai/2007
Mesaje: 1421
Locație: Sibiu
|
| Trimis: Vin Apr 25, 2008 8:49 am Titlul subiectului: |
|
|
mai ombladdon, daca tot te dai rotund aici, ma simt responsabil sa iti tai elanul:
Ombladon1991 a scris: hmm am si eu cv d genu dar eu folosesc functie ca sa deschid :D Cod: if ($_GET['page'] == null)
{
mode(home);
}
elseif ($_GET['page'] == "o pagina")
{
mode(lol);
} Asa, si de fiecare data cand adaugi o pagina noua in site, trebuie sa lucrezi la functia asta... foarte automatizat, n-am ce zice...
Ombladon1991 a scris: si functia :] Cod: function mode($string)
{
$filename = "files/" . stripslashes($string) . ".html";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
echo $contents;
}
bft :D felicitari pentru reinventarea rotii. Cum stai cu progresele referitor la mersul pe jos? Ala cand il inventezi? Cod:
echo file_get_contents("files/" . stripslashes($string) . ".html");
Greu, zau...
Anyway, nu inteleg de ce va luati de octavian, ca el chiar nu a dat o solutie proasta, din contra, a imbunatatit solutia lui crivion (cu array-ul de fisiere permise) folosind readdir ca sa automatizeze constructia acestui array cu fisierele permise din folder-ul respectiv. Ce s-a intamplat apoi? Vine joe_black si tranteste doua afirmatii din avion, fara sa dea nici un argument sau macar vreun comentariu pertinent (miroase a postcount, parerea mea), dupa care vine Amenthes si se ia de octavian, cum ca
Amenthes a scris: @vectorialpx: omul vrea sa automatizeze, ca de asta e programator, nu sa
stea sa puna o noua pagina in array de fiecare data cand mai creeaza inca una. Daca ai fi Yahoo! cam cat de mare ar fi array-ul ala?
E adevarat ca pentru un site-uletz mai mic merge chestia cu array-ul dar daca te complici e bine sa faci refactoring la felul in care incluzi paginile. Deci dupa o lectura superficiala a thread-ului si-a ales victima si si-a umflat muschii... Ma asteptam la mai mult de la voi, sincer...
Iar ca si concluzie, octavian, daca ti-ai cerut scuze de la Amenthes, ai inteles gresit care de la care trebuia sa se scuze. Punct. |
|
| Sus |
|
joe_black
Data înscrierii: 03/Mai/2006
Mesaje: 42
|
| Trimis: Vin Apr 25, 2008 3:47 pm Titlul subiectului: |
|
|
vectorialpx a scris: vezi ca ultimul paragraf nu-mi apartine... ce ti se pare inutil daca iei fisierele din folder si conditionezi includerea DOAR a lor?
[/qoute]
My bad
mie mi se pare nefunctionala varianta ta:
$myfile = basename($_GET['page']);
---> ok, iese fisier.php [sau, poate fi html.. de ce nu?]
$myfile = preg_replace('#[^a-zA-Z0-9_\-]#','',$myfile);
---> nu am inteles ideea, daca eu am un fisier cu numele "nume'neconventional asa.php" ce se intampla?
$include_path = $myfile.".php";
---> vei include fisier.php.php
if (is_readable($include_path)) {
--->eu zic ca nu va fi readable...
include ($include_path);
}
ideea mea e ca nu cel ce face site-ul lucreaza cu el... cel ce face site-ul trebuie sa se adapteze tuturor nevoilor, fara a pune clauze de genul "sa nu incluzi fisiere care contin *"
1. cand dai basename degeaba vrea sa faca remote inclusion ca i-ai eliminat calea
2. Zboara toate chestiile neconventionale care nu-si au locul in numele unui fisier si altele : caractere hexa sau puncte
Sa furam un pic ideea celor de la Zend Framework nici ei nu lasa orice fel de caracter in fiser. Oricum poti sa le adaugi
aici se verfica un path de aceea apar "\" si "/"
Cod: /**
* Ensure that filename does not contain exploits
*
* @param string $filename
* @return void
* @throws Zend_Exception
*/
protected static function _securityCheck($filename)
{
/**
* Security check
*/
if (preg_match('/[^a-z0-9\\/\\\\_.-]/i', $filename)) {
require_once 'Zend/Exception.php';
throw new Zend_Exception('Security check: Illegal character in filename');
}
}
3.daca nu e readeable cum il va include ?
@mihaitha : Verificarea directa a unui fisier este mult mai eficienta decat listarea unui director si dupaia verificarea 'in_array'
4. Am presupus totusi ca vrea sa includa niste fisere php sisa le execute |
|
| Sus |
|
mihaitha
Data înscrierii: 04/Mai/2007
Mesaje: 1421
Locație: Sibiu
|
| Trimis: Vin Apr 25, 2008 3:56 pm Titlul subiectului: |
|
|
| joe_black a scris: @mihaitha : Verificarea directa a unui fisier este mult mai eficienta decat listarea unui director si dupaia verificarea 'in_array' Suna altfel. Cand ai postat obiectia ta, n-ai specificat de ce, iar din context se intelegea cu totul altceva. Ai dreptate cu afirmatia asta. |
|
| Sus |
|
Amenthes
Data înscrierii: 12/Dec/2005
Mesaje: 391
|
| Trimis: Sâm Apr 26, 2008 3:24 am Titlul subiectului: |
|
|
Forumul asta e sursa de irascibilitate. Trebuie sa se simta unii mai importanti...
@mihaitha Ca am avut eu discutiile mele cu octavian, ok, le-am lamurit. Dar cu Ombladon1991 de ce vorbesti asa? Ai simtit si tu nevoia sa iti umflii muschi? Pardon, sa te simti responsabil... Ce sa iti povestesc... cand face progrese referitoare la mersul pe jos... Dupa care amintesti de readdir, fara insa a te simti iar responsabil si sa il inveti si pe octavian de scandir (octavian, no offense, n-am nimic cu tine). Daca incepi sa faci pe viteazul, fa-o pana la capat.
Referitor la posturile mele, in primul post catre octavian nu am facut decat sa explic ceea ce am inteles eu ca a vrut joe_black sa faca, nu m-am legat de nimeni si daca nu ai fi citit tu posturile superficial ai fi vazut ca octavian nu s-a simtit asa lezat ca tine de ceea ce am spus. In al doilea da, m-am legat, dar se poate foarte bine intelege de ce. |
|
| Sus |
|
mihaitha
Data înscrierii: 04/Mai/2007
Mesaje: 1421
Locație: Sibiu
|
| Trimis: Mie Apr 30, 2008 9:36 am Titlul subiectului: |
|
|
No, ce sa zic. Scuze ca nu te mai simti asa de important incat sa isi ceara un moderator scuze de la tine.
Nu 'l-am invatat pe octavian de scandir' pentru ca sunt de acord cu metoda lui cu readdir, intrucat o folosesc si eu. opendir() + readdir() + closedir() fac acelasi lucru ca si scandir(), in caz ca n-ai aflat, chiar si mai rapid:
<?
$images = $_SERVER['DOCUMENT_ROOT'] . '/img/masini/normal';
$start = microtime(true);
$files = scandir($images);
$end = microtime(true);
echo 'scandir - ', count($files), ' fisiere - ', ($end - $start), ' microsecunde';
echo '<br /><br />';
$files = array();
$start = microtime(true);
$dir = opendir($images);
while ($f = readdir($dir))
$files[] = $f;
closedir($dir);
$end = microtime(true);
echo 'opendir + readdir - ', count($files), ' fisiere - ', ($end - $start), ' microsecunde';
?>
rezultate: Cod:
scandir - 14324 fisiere - 0.0233409404755 microsecunde
opendir + readdir - 14324 fisiere - 0.0212759971619 microsecunde
scandir - 14324 fisiere - 0.0231490135193 microsecunde
opendir + readdir - 14324 fisiere - 0.0196368694305 microsecunde
scandir - 14324 fisiere - 0.0232789516449 microsecunde
opendir + readdir - 14324 fisiere - 0.0198650360107 microsecunde
Uite, tocmai am facut pe viteazul pana la capat.
Cand vine cineva si posteaza un cod de 10 linii care face acelasi lucru ca si o functie preimplementata, plus ca acel cod era practic acelasi lucru care s-a discutat in cele 15 post-uri precedente, mi se pare normal sa ma iau de el. De ce te simti tu lezat daca ombladdon nu a comentat? Imi suna a ipocrizie.
In al doile rand, vad si eu ca te-ai legat, dar tot nu inteleg de ce. |
|
| Sus |
|
vectorialpx
Data înscrierii: 01/Mar/2005
Mesaje: 2925
Locație: țopăi pe tasta DELETE
|
| Trimis: Mie Apr 30, 2008 1:28 pm Titlul subiectului: |
|
|
haideti sa nu ne mai certam ca nu are sens... cred ca omul a inteles ideea: scandir, array scris manual, baza de date cu fisiere, etc... ideea e sa nu lasi sa puna user-ul ce vrea fara sa conditionezi pentru ca riscurile sunt printre cele mai mari in cazurile astea [asa consider eu]... e ca si cum ai da contul e FTP... cred ca o poarta de securitate mai mare nu exista :)
sper ca v-ati distrat pe 27...
bafta! |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|