php
[php class review] Relink - Generare de url-uri dinamica dupa configuratia mod_rewrite
Sunt abonat la newsletter-ul phpclasses si il citesc mereu pentru a afla ce clase noi au fost postate pe site. Si din cand in cand gasesc cate o clasa mai interesanta si/sau inovativa . Ca de exemplu azi cand printre clasele castigatoare la Innovation award a fost una care mi-a atras atentia.
Clasa dezvoltata de Benjamin Falk pe care el a numit-oRelink este una care mi s-a parut una foarte interesanta si de o utilitate destul de mare.
Sa zicem ca ai dezvoltat un site, si normal ca vrei ca el sa fie cat mai vizibil pe internet. Asa ca te apuci sa faci un pic de SEO pentru el. Insa asta inseamna ca trebuie sa modifici toate linkurile vechi din site sa fie conform noului format. Si asta inseamna timp (as putea spune si timp pierdut acum).
Dar daca esti ca mine si stii un pic de SEO dar nu esti chiar un expert, si dupa o perioada fie ca angajezi un expert SEO sau primesti sfaturi de la unul. Si te hotarasti sa schimbi iar linkurile. Si daca vorbim de un site mai mare, atunci chiar ca ai un pic de find & replace.
Aici vine aceasta clasa care te ajuta sa generezi url-uri in mod dinamic dupa configuratia .htaccess.
Dar cum totul e mai usor cu un exemplu:
Intai initializam clasa.
[php]
require_once 'class.relink.php';
$htaccessFile = './htaccess-example';
$c_relink = new RELINK($htaccessFile);
// Daca lesi parametrul $htaccessFile gol, clasa o sa ia in mod automat fisierul .htaccess din folderul curent
[/php]
Apoi tot ce trebuie sa faci este sa pui in loc de link-uri, apelul la o metoda a clasei :
[php]
echo 'View blog | ';
echo 'Edit Blog | ';
echo 'Show all information';
[/php]
Inca nu am folosit-o la un proiect dar cu siguranta o sa o folosesc la urmatorul.
Sper sa vi se para la fel de interesanta ca si mie.
Cheers
Inteligenta artificiala in php
Oameni au fost dintotdeauna facinatii cu Inteligenta artificiala. Inteligenta artificiala Online, cunoscuta sub numele de Bots, este cateodata comparata cu "mama" inteligentei artificiale online, A.L.I.C.E. acronim de la “Artificial Linguistic Internet Computer Entity” sau pe romaneste "Entitate Lingvistica Artificiala pe Internet Computer" ( suna cam din topor in romana ) , A.L.I.C.E este un bot dezvoltat la mijlocul anilor 90 si este capabil sa tina o conversatie inteligenta, si sa dea raspunsuri relevante.
A.L.I.C.E. si variatii ale ei, raspund la limbajul AIML (Artificial Intelligence Markup Language) pentru a primi instructiuni despre cum gandesc. Exista cateva implementari ale acestui bot in diverse libaje ca Java, Ruby, Perl, Python, etc, si exita unul chiar si in PHP numit Program E.
Program E
Program E este o platforma pentru a rula roboti de inteligenta artificiala. Este scris in PHP si foloseste MySQL ca baza de date. Program E ruleaza boti care au fost scrisi in Artificial Intelligence Markup Language sau AIML.
Paul Rydell a fost autorul original al Program E. De lansarea lui initiala, proiectul a fost dezvoltat in continuare de Anne Kootstra and Icomsec. Poti sa downloadezi Program E de pe Sourceforge
Iti urez Chat de calitate cu A. L. I. C. E.
Testarea performatelor aplicatiilor web la un trafic ridicat
Pana nu demult nu am testat niciodata nici una din aplicatiile dezvoltate pentru cum s-ar comporta la un anumit nivel de trafic. Stiam ca sunt aplicatii care fac acest lucru dar nu am ajuns sa folosesc una niciodata, nici nu am avut nici un client care sa imi ceara acest lucru. Stiu ca poate o sa fiu certat de unii pentru acest lucru, si trebuie sa recunosc ca a fost o greseala a mea sa nu o fac pana acum, mai ales la proiectele mari. Greseala pe care am hotarat sa o corectez.
Desi stiam ca exista astfel de aplicatii, cam la nivelul asta se situau cunostiitele mele din acest domeniu. Asa ca m-am apucat sa caut mai multe informatii pe google. Targetul era sa gasesc o aplicatie cat mai completa si daca se poate si open-source ar fi fost perfect.
Asa ca dupa ceva googling am reusit sa gasesc 3 aplicatii software care se potriveau cu criteriul de mai sus, si care aveau si un renume destul de bun in comunitatiile de developers. Voi incerca sa fac un mic review la fiecare bazat pe informatiile pe care le-am gasit despre ele. La acest moment nu am reusit sa le testez prea mult pe toate, asa ca voi reveni cu parerea personala intr-un articol viitor.
1. OpenSTA
Numele OpenSTA este un acronim care vine de la Open System Testing Architecture. Nu este numele unei aplicatii propriu-zise ci numele unui set de instrumente bazate pe o platforma software numita CORBA.
Setul de instrumente OpenSTA este complet gratuit si open-source licentiat sub GNU GPL. Codul sursa fiind disponibil pe SourceForge.
Ultima versiune stabila este 1.4.5 si platformele suportate sunt Windows NT, 2K or XP, desi codul sursa este disponibil.
OpenSTA are cateva avantaje care il recomanda: este puternic, flexibil, foarte programabil si gratuit :D. Ultimul avantaj este cel care m-a atras prima oara, si sunt sigur ca si pe unii dintre voi. Stiu ca unele persoane sunt reticente la solutiile gratuite, si cred in sintagma " primesti cat platesti ", dar din articolele citite acesta set de intrumente este foarte bine vazut si chiar folosit de unele firme de audit aplicatii web pentru testele pe care le desfasoara.
In OpenSTA poti programa vizitatori virtuali care vor genera traficul virtual. Acestia pot fi programa prin OpenSTA's SCL (Script Control Language). Dezavantajul acesteia este ca trebui sa inveti acel limbaj. Daca nu ati folosit niciodata acest limbaj ( ca si mine de altfel ) veti avea un pic de invatat pana cant veti putea realiza cu el ceea ce doriti. Dar pentru testele mai putin complicate, si pentru incepatori, exista o alternativa pusa la dispozitie, folosirea browserului pentru a inregistra actiunile care vor fi efectuate de vizitatorii virtuali.
Dupa ce ati "inregistrat" scriptul pe care il vor rula vizitatorii poti sa rulezi un test cu un oricati useri vei dori, si sa analizezi modul in care aplicatia ta se comporta la acel grad de incarcare. Rezultatele se pot prezenta si in grafice pentru o interpretare mai usoara.
2. WebLoad
Inca o aplicatie open source foarte puternica. WebLOAD Open Source, licentiata sub GNU Public License (GPL) , este bazata pe WebLOAD, produsul firmei RadView care e deja folosit in peste 1,600 de site-uri. Disponibila pentru download si folosire gratuit, WebLOAD este o aplicatie de origine comerciala care a fost trecuta sub licenta GPL ( nu prea vezi asta prea des ) avand in spate cativa ani buni de product development.
Avantajul cel mai mare al acestei aplicatii este ca poti sa creezi scripturi foarte complexe, fara sa introduci o singura linie de cod, asta prin interfata vizuala foarte avansata. Insa daca pentru un test mai avansat nu se poate realiza un anumit lucru din editorul visual ai si posibilitatea de a edita/completa manual scriptul folosindute de JavaScript.
Dupa ce ai facut scriptul, esti gata sa rulezi testul. WebLOAD poate genera trafic pentru un numar foarte mare de vizitatori in mod simultanm avand deasemenea posibilitatea de a simula numeroase browsere de la versiunile vechi de IE pana la versiuni noi de Firefox. In timpul testului, WebLOAD inregistreaza date complexe despre modul cum aplicatia raspunde la traficul indus. Aceste dare sunt folosite de WebLOAD pentru generarea de rapoarte variate ale performantei. Acestea pot fii sub forma tabelara pe care le poti urmarii si analiza, fie renderizare pe ecran fie imprimate. Deasemenea WebLOAD poate genera o varietate de grafice dupa datele salvate, care te pot ajuta sa gasesti zonele cu probleme din aplicatia ta mult mai usor ( sper sa nu fie cazul ).
3. Microsoft’s Web Application Stress Tool
Cele doua solutii de mai sus desi sunt foarte bune, sunt relativ complicate. Si cateodata poate e nevoie de ceva mic si rapid prin care sa faci un test rapid pentru o pagina pe care abia ai scris-o. Sa zicem ca abia ai scris o pagina care genreaza un raport despre vanzari, in care se faca ceva interogari SQL si cateva calcule. Si te intrebi acum cat de repede s-ar genera acel raport daca ar fi accesata de 300 de vizitatori simultan. Pentru aceste scenarii, Microsoft’s Web Application Stress Tool va fi unealta perfecta. Este o aplicatie foarte simpla si mica (9MB) care poate efectua un test simplu de trafic stress asupra aplicatiilor web.
Microsoft WAS web stress tool a fost construit pentru a simula cat mai bine cereri de la multiple borwsere catre pagina pe care o testati. Folosindu-va de acest soft puteti sa faceti teste preliminare asupra perforamantelor si stabilitatii aplicatiei construite. Ea putand sa simuleze un numar mare de cereri de pe un numar foarte mic de masini client.
Pentru a face un test trebuie sa apasati butonul record in menuiul TOOL si o fereastra a browserului se va deschide. Aici veti efectua actiunile pe care vrei sa le efectueze vizitatorii virtuali, acestea vor fi inregistrate, si vor fi folosite la efectuarea testului. Dupa ce sunteti gata apasati Stop recording. In acest moment ar trebui sa vedeti un ecran asemanator cu cel de mai jos. In partea din stanga ar trebui sa vedeti diversi parametri pentru efectuarea testului.
Cam atat pana acum. Sper ca acest articol v-a ajutat si astept comentariile voastre si sfaturi despre testarea aplicatiilor web ( sunt convins ca multi au mai multa experienta decat mine )
Cheers
Cresteti viteza aplicatiilor web prin modificarea configurarii php
Acest articol doreste sa va ajute sa mariti viteza aplicatiilor php pe care le scrieti prin tweaking la configurarile php default. Timpul castigat prin aceste modificari poate nu va fi asa vizibil din partea de user, dar poate usura un pic munca server-ului, deasemenea unele vor avea si un impact in partea de securitate a aplicatiei.
Daca esti pe un server shared si nu stii cum se schimba configurarea php ar fi poate mai bine sa citesti acest articol inainte.
Dar destul cu palavrageala hai sa vedem exact despre ce e vorba. Voi scrie numele configurari, setarea pe care o recomand si motivatia pentru aceasta configurare.
short_open_tag = Off
Aceasta va anula short tags ( <? .... ?> ) care nu sunt atat de recomandat de folosit si in plus engine-ul php va avea o problema in plus pe care sa il rezolve.
asp_tags = Off
Aceasi explicatie ... nu folosi taguri : <% echo “hello world”; %>
memory_limit = 32M
Aceasta configurare va fi una pe care o vei modifica de cateva ori. Dar e mai bine ca pentru inceput sa o setezi la o valoare mai mica pentru a urmari care scripturi folosesc mai multa memorie si a urmari din ce cauza se inampla aces lucru.
Un articol despre consumul de memorie in php poti gasi aici .
register_long_array = Off
Aceasta configurare spune engine-ului PHP sa nu mai declare variabilele de tip $HTTP_*_VARS care sunt de mult timp nefolosite. Valoarea default e On. Din cauza ca nimeni nu prea le foloseste ( doar daca nu aveti nevoie pentru compatibilitate cu vreun script mai vechi ) e recomandat sa le aveti off, pentru motive de performanta. In locul lor este recomandat sa folosti matricile superglobale $_GET, $_POST etc.
register_argc_argv = Off
Aceasta setare e mai mult sau mai putin la fel ca cea de sus register_long_arrays ( daca credeti ca ma insel, certati-ma intr-un comentariu ) asa ca o vom seta tot off.
auto_globals_jit = On
Aceasta setare va opri php sa genereze variabilele SERVER si ENV la inceputul scriptului ( asa cum face in configuratia default ), in schimb generandule pe masura ce ele sunt necesare (Just In Time). Aceasta ar trebui sa ajute la performanta prin reducerea cantitatii de memorie folosita de scriptul php.
Pentru ca aceasta setare sa functioneze este nevoie ca register_globals, register_long_arrays, si register_argc_argv sa fie disabled.
Ca un inside info : am incercat pe unul din servere aceasta configuratie si nu a mers, variabilele SERVER si ENV fiind nule, dar cred ca era ceva in neregula pentru ca am incercat pe alt server si a mers :D.
magic_quotes_gpc
Aceasta setare s-a dovedit a fi o adevarata durere de cap cateodata. Cand este on , toate ' (ghilimele simple), " (ghilimele duble), \ (backslash) si valori NUL's sunt "anulate" cu un backslash automat. De ce este asa rau ? Pentru ca nu detineti dumneavoastra controlul asupra acestui lucru. De exemplu daca folositi un mysql wrapper pentru interactiunea cu baza de date care are deja o functie de escape ( probabil si mai mult decat atat, una de clean pentru coduri sql ), ceea ce va face ca valorile introduse sa fie de doua ori "escaped" si dupa cateva edit-uri sa zicem valoarea va fi plina de backslash-uri. Asa ca mai bine o setezi off si iti faci propriul escape, si poate si o functie de clean pentru valorile folosite in interogarile SQL pentru a preveni SQL Injection.
always_populate_raw_post_data = Off
Raw Post data este o setare mai avansata, asa ca daca nu stii despre ce e vorba inseamna ca nu o folosesti asa ca mai bine o setezii off si ii mai iei o grija din lista de treburi facute de engine-ul php
Cam atat pentru acum .... daca v-am fost util s-au vreti sa ma certati ca am batut campii ... folositi cu incredere formularul de comentarii
Validare CUI/CIF folosind php
CIF - codul de identificare fiscala este un cod numeric constituind codul unic de identificare a unui comerciant.Acesta se mai numeste si cod fiscal sau cod unic de identificare. Pana la 1 ianuarie 2007 s-a numit Cod Unic de Inregistrare (CUI).
Conform legii nr. 359 din 8 septembrie 2004, privind simplificarea formalitatilor la inregistrarea in registrul comertului a persoanelor fizice, asociatiilor familiale si persoanelor juridice, inregistrarea fiscala a acestora, precum si la autorizarea functionarii persoanelor juridice:
Solicitarea inregistrarii fiscale a unui comerciant se face prin depunerea cererii de inregistrare la biroul unic din cadrul oficiului registrului comertului de pe langa tribunal, iar atribuirea codului unic de inregistrare de catre Ministerul Finantelor Publice este conditionata de admiterea cererii de inregistrare in registrul comertului de catre judecatorul-delegat.
* Pentru asociatiile familiale, precum si pentru persoanele juridice prevazute la art. 2 structura codului unic de inregistrare se stabileste de Ministerul Finantelor Publice, Ministerul Muncii, Solidaritatii Sociale si Familiei, Ministerul Sanatatii, Ministerul Administratiei si Internelor si Ministerul Justitiei.
* Pentru persoanele fizice codul unic de inregistrare coincide cu codul numeric personal atribuit de Ministerul Administratiei si Internelor sau, dupa caz, cu numarul de identificare fiscala atribuit de Ministerul Finantelor Publice.
Atributul fiscal atasat codului unic de inregistrare este un cod alfanumeric având semnificatia categoriei de platitor de taxe si impozite la bugetul de stat.Daca atributul fiscal are valoarea "RO", acesta atesta ca persoana juridica a fost luata in evidenta organului fiscal ca platitor de T.V.A.
Un CIF este alcatuit astfel :
[ |ZZZZZZZZZ| ] |C|
|_________| |_|
: :
: --> Cifra ce control
:
--> Numarul de ordine (maxim 9 caractere)
Algoritmul de validare al unui cod CIF
Pas preliminar: Se testeaza daca codul respecta formatul unui cod CIF. Adica lungimea maxima sa fie de 10 cifre si sa contina doar caractere numerice.
Pas 1: Se foloseste cheia de testare "753217532". Se inverseaza ordinea cifrelor codului CIF precum si a cheii de testare.
Pas 2: Se ignora prima cifra din codul CIF inversat (aceasta este cifra de control) si se inmulteste fiecare cifra cu cifra corespunzatoare din cheia de testare inversata.
Pas 3: Se aduna toate produsele obtinute. Suma rezultata se inmulteste cu 10 si produsul este impartit la 11. Cifra obtinuta, in urma operatiei MODULO 11 reprezita cifra de verificare. Daca in urma impartirii s-a obtinut restul 10 atunci cifra de verificare va fi 0.
Pas 4: Pentru un CIF valid cifra de verificare va trebui sa corespunda cu cifra de control a codului CIF initial.
(sursa www.validari.ro)
Validarea CIF folosind php
Acum pentru codul php:
[php]
function checkCIF($cif){
if (!is_numeric($cif)) return false;
if ( strlen($cif)>10 ) return false;
$cifra_control=substr($cif, -1);
$cif=substr($cif, 0, -1);
while (strlen($cif)!=9){
$cif='0'.$cif;
}
$suma=$cif[0] * 7 + $cif[1] * 5 + $cif[2] * 3 + $cif[3] * 2 + $cif[4] * 1 + $cif[5] * 7 + $cif[6] * 5 + $cif[7] * 3 + $cif[8] * 2;
$suma=$suma*10;
$rest=fmod($suma, 11);
if ( $rest==10 ) $rest=0;
if ($rest==$cifra_control) return true;
else return false;
}
[/php]
Cum se poate schimba configurarea php pe un server shared ?
Cateodata in aplicatiile pe care le creati veti fi nevoiti sa modificati o anumita configurare a php-ului de la valoarea default la valoare necesara pentru a putea dezvolta aplicatia. Cea mai intalnita modificare este aceea legata de flag-ul global_registers si anume setarea lui off ( nu am nici cea mai mica idee de ce unele servere inca mai au global_registers on ).
Daca este vorba de un server local pe care il rulazi pe calculatorul tau, sau de un server la care ai acces de root, solutia este foarte simpla : trebuie doar sa modifici ce doresti in fisierul de configurare (php.ini) ce ai nevoie, restart la server ... si voila job done.
Dar ce se intampla daca esti pe un hosting shared. Nu poti sa ceri echipei de suport a serverului sa modifice configurarea pentru tine ( nu prea ar putea nici daca ar vrea, deoarece ar afecta toate site-urile de pe server si ar fi cativa oameni nervosi pe chatul de suport in cateva minute de la schimbare :D ). Din fericire persoanele care au construit software-ul rulat de server ( apache in cele mai multe cazuri ) s-au gandit la tine si la situatia asta si au adaugat 2 posibilitati ca tu sa poti schimba local configurarile php fara a afecta celelalte domenii hostate pe server.
1. Crearea unui fisier PHP.ini local
Pur si simplu creezi un nou fisier php.ini in root-ul domeniului si adaugi configurarile de care ai nevoie in aceast fisier ca si cum el ar fi cel din directorul de instalare al php-ului. Aceasta va face ca acele setari sa fie suprascrise de la cele globale doar pentru domeniul tau. Revenind la situatia noastra de a seta register_globals off ar tb sa adaugi urumatoarea linie :
“register_globals = off”
2. Modificarea configurarii cu fisierul .htaccess
A doua metoda ar fi sa te folosesti de fisierul .htaccess ( cunoscut de uni doar pentru partea de url_rewrite ). Pentru aceasta trebuie sa stii o anumit sintaxa:
# pentru a modifica un atribut flag
php_flag [name] [value]# pentru a modifica un atribut valoare
php_value [name] [value]
Revenind la exemplul nostru : php_flag register_globals off
Pentru a testa daca modificarile facute au fost efectuate, poti folosi functia phpinfo(). Noile setari ar trebui sa apara in coloana LOCAL.
Ar trebui sa stii ca nu toate serverele suporta aceste 2 metode, unele suporta doar una dintre ele, asa ca ar fi indicat sa intrebi baieti de la suport care din aceste metode este suportata de server, nu de alta dar sa nu te chinui degeaba si sa spui ca ti-am spus eu prostii.
Si inca o nota, nu toate setarile php pot fi modificate local. O lista cu toate setarile si cum pot fi ele modificate se gaseste pe site-ul oficial php :
http://www.php.net/manual/en/ini.php#ini.list
Setarile care pot fi suprascrise local au PHP_INI_PERDIR sau PHP_INI_ALL in coloana Changeable. Cele care au PHP_INI_SYSTEM pot fi modificate doar din fisierul php.ini din folderul de instalare al php-ului.
Cam asta a fost. Sper ca v-a redus googling time-ul putin.
Cheers.
Cum sa adaugati JavaScript in articolele din Joomla
Daca ai lucrat cu joomla cu siguranta te-ai lovit de situatia in care ai vrut sa adaugi cod javascript intr-o pagina din faimosul CMS, fie ca era vorba de un cod pentru reclame ( google adsense sau yahoo ) sau un widget de la un site.
Si pun pariu ca ai incercat sa faci un paste la cod in continut, dar dupa cum ai vazut editorul va transforma codul tau in coduri HTML ceea ce va face ca el sa apara pur si simplu scris in pagina fara sa fie rulat de browser. De exemplu < va fi transformat in >.
Solutia ? Una simpla si low-tech, cel putin cea gasita de mine :)
Login ca admin
Mergi in Global Configuration si selectezi la WYSIWYG Editor > No WYSIWYG Editor
Acum salvezi.
Acum ca ai facut dissable la editor poti pune codul tau javascript in paginile joomla.
Cum spuneam o solutie very low-tech. Partea proasta este ca apoi va trebui sa reactivezi editorul WYSIWYG, si ca va trebui sa repeti acest procedeu de fiecare data cand vei dori sa adaugi javascript in joomla, imi pare rau nu am gasit alta metoda. Daca tu ai gasit una, scrie si tu un comentariu si anuntane si pe noi astia mai nefericiti.
Cheers
[later edit]
Mai exista o posibilitate sa instalati un nou editor gen FCKeditor care are posibilitatea de editarea a sursei HTML.
Cum se genereaza website snapshots ?
Cateodata in constructia unor aplicatii e nevoie de un snapshot al unei pagini web. Acest task poate fi realizat in mai multe moduri, unele mai simple altele mai putin.
Cea ma simpla varianta ar fi sa folositi un serviciu de generare de website snapshots. Majoritatea pe care le-am gasit, au o limitare in ceea ce priveste marimea acest thumbnails, si genereaza destul de greu pentru pagini care nu sunt pagina de index principal. Insa am descoperit unul mai adaptabil :
http://www.artviper.com/tools.php
Acest thumbnail generator este printre cele mai bune ( parere stric personala ) prin faptul ca ofera posibilitatea de generare de thumbnail de orice marime si de pe orice pagina ( inclusiv subpagini ) si intr-un timp destul de scurt.
Lista de parametri :
url URL-ul pagini pe care o doriti
w Latime thumbnail
h Inaltime thumbnail
sdx Latime screen port size ( i.e. 1024 )
sdy Inaltime screen port size
q Nivelul de calitate al imagini ( jpeg ) - de la 30 la 90 %
rot Rotiti imaginea da / nu ( 1 / 0 )
deg Cu cate grade se face rotatia ( 0 - 360 )
bg Culoarea fundalului pentru cazul in care imaginea este rotita, fara #
Dar cum cateodata cantitatea de imagini este prea mare pentru a folosi un serviciu, si se doreste controlul deplin asupra imaginilor generate.
Generarea de snapshots se face in principal prin accesarea unui browser de pe server si "citirea" imagini generate de acesta. Nu se poate face un script pur care sa genereze un snapshots doar din php. Asta ar presupune realizarea unui browser complet in php care sa "parseze" codul HTML,CSS, Javascript pentru a genera imaginea. Din acest motiv solutiile de generare de snapshots difera in functie de sistemul de operare.
Generare de website snapshots in Windows.
Cea mai "simpla" solutie pentru windows care am gasit-o este Website Thumb Generator. Pentru a putea folosi acest script trebuie sa dispuneti de un server Windows cu PHP instalat impreuna cu libraria GD, dar sa aveti si permisiunea sa executati aplicatii .exe pe server si acces la Internet Explorer.
In principiu aceasta se foloseste de IECapt ( download alternativ ) pentru a rula Internet explorer si a salva un snapshot in directorul specificat de dumneavoastra in setari. Deasemenea el dispune si de un sistem de cache pentru a micsora timpul de generare al imaginiilor.
Daca scriptul de mai sus se foloseste de IECapt, si nu sunteti multumiti de aceasta puteti folosi si Web Thumbnail tool v.1.2.1. Acesta este o alta aplicatie prin care puteti genera snapshot / thumbnail ale paginilor web. Aceasta este gratuita si are aceleasi cerinte: Server Windows si IE 5.5 sau mai nou. Avatajul acetei aplicatii ar fi ca nu necesita instalare si contine optiune de dissable pentru scripturi, imagini sau flash.
Pentru windows ar mai fi o solutie care ar folosi Firefox ca browser si Pearl Crescent Page Saver, puteti citi mai mult despre asta aici
Generare de website snapshots in Linux.
Pentru linux solutiile sunt pe acelasi principiu, o aplicatie care acceseaza browser-ul si citeste imaginea generata de acesta.
O prima solutie o reprezinta WEBTHUMB.
Acesta se foloseste de Xvfb virtual framebuffer X server pentru a salva "imaginea" generata de mozzilla si netpbm pentru a salva imaginea.
Daca nu sunteti multumiti de acesta o alternativa ar fi khtml2png. khtml2png este deasemenea o aplicatie accesibila prin command line pentru generarea de screenshots. Se foloseste de libkhtml ( libraria folosita de browser-ul Konqueror) pentru generarea imaginilor.
Cerinte
- g++
- KDE 3.x
- kdelibs for KDE 3.x (kdelibs4-dev)
- zlib (zlib1g-dev)
- cmake
Cam astea ar fis solutiile descoperite de mine, daca aveti si alte solutii sau comentarii formularul de mai jos va asteapta.
Cheers
Cum sa previ SQL Injection
SQL injections sunt o vulnerabilitate foarte frecventa in apicatiile de pe internet care folosesc baza de date.
Foarte multi programatori nu sunt constienti ca interogarile SQL pot fi modificate extern, si presupun ca aceste comenzi sunt sigure. Asta presupune ca orice atac SQL va trece de orice masura de control si de securitate existenta pe site, si de orice metoda de autentificare folosita. In plus multi dintre ei se gandesc : Cine va incerca sa imi Hack-uiasca site-ul ? Ce motiv ar avea sa faca asta ?
Direct SQL Command Injection este o tehnica prin care un atacator creaza sau modifica o interogare SQL existenta pentru a afla informatii confidentiale, pentru a suprascrie informatii, sau chear pentru a crea noi super useri. Asta se face prin introducerea in input-urile de pe site care sunt folosite in interogariile SQL de comenzi SQL pentru asi realiza scopul propus. Dar destul cu teoria, iata cateva exemple de SQL HAcks care din pacate sunt reale.
Stergerea datelor dintr-un tabel
Acesta este un exemplu de injection, sa consideram un formular de login pe un site care are urmatoarea interogare SQL in codul php:
mysql_query('SELECT * FROM user WHERE username = "' . $_GET['username'] . '");
Un user rau-intentionat poate introduce in input-ul user valoarea ""; DELETE FROM user WHERE 1", care va avea ca efect stergera tuturor userilor din tabel.
SELECT * FROM user WHERE username = ""; DELETE FROM user WHERE 1 ;
Aceasta tip de SQL Injection este posibil sa fie blocat de extensia mysql a PHP-ului care nu permite mai multe interogari mysql in mod defaulst, dar acesta este un exemplu.
Resetarea unei parole / obtinerea de noi privilegii
Se luam acest query relativ siimplu de schimbarea a parolei unui user
$query = "UPDATE user SET password="'.$_GET['password'].'" WHERE id="'.$_GET['user_id'].'" ;
O persoana rau intentionata poate obtine privilegii de admin foarte simplu :
[php]
// user_id == " or username like '%admin%'; --
$query = "UPDATE user SET password='...' WHERE id="" or username like '%admin%'; --";
[/php]
Cum Prevenim SQL injection
E posibil sa crezi ca aceste brese de securitate sunt posibile doar daca atacatorul stie structura bazei de date. Ai dreptate dar, sa nu crezi ca e greu sa afli structura, fiind numeroase cai de a o afla : mesaje de eroare sql printate pe ecran, folosirea unui script open source, si chear simpla incercare a mai multor variante fiind cunoscut faptul ca multi programatori folosesc aceleasi denumiri ( sau destul de apropiate ) pentru nume de tabele si campuri.
Iata un exemplu de atac SQL pentru a ghicii numele unui tabel :
[sql]
SELECT ... FROM table WHERE id = '$user_id';
SELECT ... FROM table WHERE id = '' AND 1=(SELECT COUNT(*) FROM tabname); --';
[/sql]
Dupa cateva incercari, inlocund tabname cu diferite variante atacatorul va gasi un nume de tabel valid.
Pentru a preveni aceste atacuri primul pas este sa construiti aplicatia luand in calcul si posibilitatea unui atac. Iata si cateva metode de prevenire a atacurilor SQL:
- Nu va conectati niciodata la baza de date SQl cu un super user. Incercati sa limitati privilegiile userului pe care il folositi la conectare la minum posibil.
- Intodeauna verificati daca input-urile de la useri sunt ceea ce va asteptati sa fie. Folositi functiile php de validare ( ex: is_numeric() ) sau chiar si validare folosind expresii regulate ( regexp ) .
- Transformati orice camp in tipul pe care il asteptati:
[php]
settype($offset, 'integer');
$query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
// please note %d in the format string, using %s would be meaningless
$query = sprintf("SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET %d;",
$offset);
[/php] - Limitati numarul de caractere in input-urile userilor. Desi nu va impiedica toate atacurile SQL va oprii o mica parte din ele :)
- Nu printati pe ecran mersajele de eroare SQL, tineti minte ca am vorbit si mai sus de riscul ca atacatorul sa afle structura DB din aceste mesaje..
- Si un exemplu de "Best Practice" SQL direct din manualul PHP :
[php]
// Quote variable to make safe
function quote_smart($value)
{
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Quote if not integer
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());// Make a safe query
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
quote_smart($_POST['username']),
quote_smart($_POST['password']));
mysql_query($query);
[/php]
Sper ca acest articol va deschis apetitul si veti incepe sa va protejati aplicatiile web.