Uncategorized

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 &gt;.

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.

Web Thumbnail tool v.1.2.1 screenshot

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.


Transfer cont WHM/cPanel pe un alt server

Vine si un timp cand o sa gasesti o oferta mai buna pentru hosting si vrei sa iti muti clienti ( conturile ) pe un nou server. Metoda ideala ar fi sa realizezi acest lucru fara sa dai de banuit clientilor ca ai mutat serverul. Deasemenea si a minimiza timpul in care site-urile sa nu functioneze, e-mailurile pierdute si pierderile de date.

Prin acest articol sper sa va ajut sa realizati acest lucru, el este pentru cei care folosesc WHM/Cpanel dar principiile se pot aplica si pentru alte softuri de control panel folosite. Totusi pentru a putea realiza acest lucru aveti nevoie de parola de root a serverului vechi sau de userul si parola clientului.

Primul pas este sa modifici valoare TTL ( Time To Live ) pentru fiecare cont pe care doresti sa il transferi. Pentru a face acest lucru urmareste urmatorii pasi :

1. Click pe Edit DNS zone in sectiunea DNS Functions ( Aceasta gasindu-se in WHM ). Selecteaza contul pe care vrei sa il muti si da click pe butonul de edit .

2. In domain zone vei vedea urmatorul text @ IN 14400 SOA undeva in partea de sus a pagini, acest numar spune serverelor DNS timpul cat aceste setari sunt valabile, in acest caz 4 ore, si pentru ca dorim un updatare cat mai rapida a setarilor vom modifica acesta inregistrare in 3600 adica o ora. Daca nu ati realizat inca :) cifra este in secunde.

3. Aceasi regula se aplica pentru inregistrarea TTL pe care o vei gasi undeva mai jos. Modifica si acesta inregistrare de la 14400 la 3600 deasemenea.

4. Ca sa transmitem serverelor de DNS ca aceste setari sunt noi vom modifica serial number-ul incrementandul cu 1. ( Acest lucru este posibil sa fie facut de WHM in mod automat dar e bine sa il incrementati si voi ca sa fiti siguri )

Dupa ce ati realizat toti pasi de mai sus pentru toate conturile pe care vreti sa le mutati ... puteti lua o bine meritata pauza. In acest timp setarile noi se vor propaga in toate serverele.

Dupa ce au trecut cele patu ore suntem agta sa incepem transferul efectiv. Pentru a realiza acest lucru ne vom loga in WHM pe noul server si in sectiunea transfers vom avea mai multe optiuni pentru a realiza transferul.

Avem o optiune de "Multiple accounts transfer". Aceasta meoda desi este o mai metoda rapida are dezavantajul de a fi mai putin sigura, si are riscul de a pierde date mai ales daca vei transfera site-uri mari cu un volum mare de fisiere/baza de date. Mutand conturile unul cate unul desi va dura mult mai mult va minimiza riscul de a pierde date. In acest articol vom trata aceasta din urma metoda.

Avem 2 optiuni pentru ultima metoda :
1. Prima daca deti parola de root la vechiul server.
2. A doua daca stiu userul si parola clientului

Dupa ce te decizi ce metoda sa folosesti si ai datele ( user si parola ) la indemana putem incepe transferul :
1. Primul pas este sa determini ce fel de site este static ( fisiere HTML ) sau dinamic ( foloseste baze de date ). Daca vobim de un site dinamic va trebui sa inchizi serverul de baza de date pentru o ora cat va dura transferul. Motivul din spatele acestei actiuni este ca nu dorim ca in timp ce facem transferul baza de date de pe vechiul server sa fie modificata si acete modificari sa nu apara pe noul server.

2. Acum selecteaza optiunea pe care te-ai decis sa o folosesti si complecteaza in formularul aparut adresa de ip a vechiului server, username-ul si parola. Deasemenea trebuie bifata daca vrei sa dai o adresa de ip noului cont sau nu. Dupa toate aste da click pe butonul setup.
Serverul va incepe sa preia datele de pe vechiul server prin FTP impartind informatia ( fisiere, baza de date ) in pachete.
ATENTIE !! In timpul acestei operatiuni nu apasa pe butoanele de stop,back sau refresh ale browserului deoarece acest lucru va cauza pierderi de informatii din noul cont pe care il creati.

3. Urmatorul pas presupune sa mergem la Edit DNS Zone din nou ( dar pe noul server de data asta ), selectateaza noul cont si da click pe butonul de edit, si schimbati informatiile de la nameservere ca ele sa reflecte namserverele tale si nu cele default, modifica serial number-ul si da click pe save.

4. Acest pas va realiza redirectarea din DNS a site-ului de pe vechiul server pe cel nou. Mergi la Edit DNS Zone pe vechiul server si schimba toate adresele de ip din adresa serverului vechi in adresa serverului nou, incrementeaza serialul si click pe save.

Si ai transferat on cont. In aproximativ o ora acesta va functiona pe noul server.Repeta toti pasi pentru toate conturile pe care vrei sa le transferi.

Dupa ce ai transferat toate conturile mai ai un singur lucru de facut, trebuie sa mergi la register-ul pentru domeniul care are ns-urile tale si sa modifici adresa de ip catre noul server.

Cam asta a fost totul. In felul asta o sa ai toate conturile transferate si functionale inainte de a avea namserverele propagate complet.

Sper ca acest articol ti-a fost util si astep comentariile voastre.