Registriraj se
Artservis1

Izmenjava
 












  • Logo(1)
  • razlika v ceni ....(3)
  • Dreamweaver vrašanje(7)
  • Delo dobi...(1)
  • Iščemo arhitekturne projektante!(0)
  • Okus 51. beneškega bienala umetnosti (0)
  • Splet 2.0? (0)
  • Reason - Šola z razlogom 5. del (1)
  • Animiran metulj (0)
  • Reason - Šola z razlogom 4. del (0)
  • Taktike & praksa: Seminar novomedijske umetnosti (0)
  • Povabilo k sodelovanju na festivalu HAIP10 (0)
  • Apple iPad: odiseja v vesolju? (0)
  • Game Developers Conference San Francisco 2010 (0)
  • Google Chrome Beta za Mac in Linux ter razširitve (0)

  • Forum> programiranje> PHP security
    lambergar

    Član

    .:PHP security:. 05/03/2007, ob 23:44

    OK, zadnje čase spremljam nove/stare buge v PHPju, pa me zanima, na kaj bit pozoren, ko začneš nevem, delat portal alpa bilokaj?

    Bi mogoče kdo z mal več izkušnjami zbral svoje predloge, pa nam mogoče tut razložil, kako se je stvari najbolje lotit?

    Pomoje nas bo kar nekaj sigurno našlo kaj zase :)
    To be or not to be?
    Stylee

    Član

    .::. 06/03/2007, ob 16:52

    ma lotit se izdelave celega portala iz nič, je precej zamudno... če imaš idejo za kak dober portal, ti priporočam, da izkoristiš zastonjski engine kot je recimo e107

    lambergar

    Član

    .::. 06/03/2007, ob 19:12

    Jah, lej... kar se mene tiče mam cilj čimbolj nadgradit znanje PHPja. Trenutno že pišem en portal (oziroma je 90% narejen že)... :) Tko da me bl zanima, kakšnih luken se je bati, kako jih preveriti in kako popraviti :)

    Sm pa itak še daleč od ultimate PHP znanja, tko da... :D
    To be or not to be?
    [BISI]

    Administrator

    .::. 07/03/2007, ob 13:05

    No ja, z uporabo vnaprej narejenih portalov je ponavadi tako kot z uporabo template dizajnom - koncni izdelek je omejen.

    Cetudi uporabis vnaprej sprogramirano portalsko resitev, je dobro vsaj nekaj malega vedeti o jeziku, ki ga poganja (ceprav je priporocljivo vedeti veliko vec, saj se ne mores zgovarjati na sistem, ce slucajno ni na voljo uradnega popravka za kaksno kriticno napako).

    Najpogosteje se v phpju delajo napake, ki temeljijo na prevelikem zaupanju do uporabnika, kjer lahko nastopi t.i. code-injection (vstavljanje kode). Proti tovrstnim napadom se zavarujes tako, da preverjas vse mozne vnose... V primeru, da se uporabnik pojavi pred taksnim naslovom:














    Koda:


    www.domena.com/index.php?id=2



    Taksen tip naslova je dokaj pogost pojav na internetu. PHP ne bo javil nobene napake, ce vpises namesto 2 nekaj drugega, zato pa moras vse skupaj preveriti ti. V zgornjem primeru moras preveriti, ce je vnos dejansko stevilka. To lahko naredis na vec nacinov (najpogostejsi dandanes je ze integrirana funkcija intval()).

    Seveda pa so popularni tudi sledeci tipi naslova:














    Koda:


    www.domena.com/index.php?stran=forum



    Pa imas lahko tezave, ker moras preverjati za stringom, kar je nekoliko tezje. Toda tezav se lahko resis na enostaven nacin s switchem ali z naprej definiranimi vrednostmi znotraj arraya recimo.














    Koda:


    // s switchem
    switch($_GET["stran"]) {
    case "forum":
    require_once "forum.php";
    break;

    case "novice":
    require_once "novice.php";
    break;

    default:
    require_once "napaka.php";
    break;
    }

    // z arrayem
    $strani = array("forum", "novice");

    if (in_array($_GET["stran"], $strani)) {
    require_once $_GET["stran"] . ".php";
    } else {
    require_once "napaka.php";
    }



    Toliko moznosti pa se sploh nismo prisli do povezave phpja z bazo! :)

    V zgornjih primerih je seveda velika moznost, da se klice vsebina iz baze. Vso "komunikacijo" med uporabnikom in bazo je treba pozorno nadzorovati. Najbolj varen bos, ce vsak vnos pred bazo oplemenetis s funkcijo mysql_escape_string ali v novejsih verzijah z mysql_real_escape_string:














    Koda:


    mysql_query("insert into uporabniki (ime, naslov, email) values ("" . mysql_real_escape_string($_POST["ime"]) . "", "" . mysql_real_escape_string($_POST["naslov"]) . "", "" . mysql_real_escape_string($_POST["email"]) . "")");



    Se dandanes se ponekod dogaja, da sistemski administratorji vklopijo moznost register_globals, ki je zelo nevarna, saj je potrebno na drugacen nacin ravnati s spremenljivkami. No, na sreco se opusca uporaba register_globals, tako da to ni vec taksen problem.

    Tako na hitro, morda pa sem se kaj pozabil. :)
    Life is a workaround...a bad one.
    [BISI]

    Administrator

    .::. 18/07/2007, ob 12:15

    No, marca sem pozabil omeniti se par stvari. Ce vstavljas v bazo s funkcijo mysql_real_escape_string, potem moras seveda tudi prilagoditi prikaz - in sicer tako, da "predelas" string s funkcijo stripslashes():














    Koda:


    ...
    echo stripslashes($email);



    Velikokrat pa se tudi zgodi, da programer spregleda uporabo nekaterih phpjevih $_SERVER spremenljivk. $_SERVER["PHP_SELF"] in $_SERVER["REQUEST_URI"] se recimo zelo pogosto uporabljata pri formularjih in tudi drugje. Tudi ti dve interni funkciji je potrebno precesati s funkcijo stripslashes().














    Koda:


    echo "<form name="form" action="" . stripslashes($_SERVER["PHP_SELF"]) . "" method="post">";
    ...


    Life is a workaround...a bad one.
    lambergar

    Član

    .::. 01/08/2007, ob 08:23

    Hvala za vse napisano :)

    Zdej nebi odpiral nove teme, bom kar tukaj se par vprasanj nastel...

    Zanima me, ce se je kdo ze kdaj ukvarjal z .doc fajli v povezavi s PHPjem... Vem da obstaja neka COM zbirka, ki naj bi omogocala ustvarjanje takih dokumentov, pa je nekako ne najdem. Zanima me torej, kako bi take dokumente lahko prikazal (v sicer omejeni obliki) in jih tudi urejal/ustvarjal. Kar se tice tiste COM skripte naj bi menda delovala samo na WINDOWS platformi... mi no like :(

    Drugo vprasanje pa je sledece... Na kaksen nacin bi sprozil neko akcijo v PHP skripti v primeru neke spremembe stanja na disku (naprimer, ce bi bila ustvarjena nova mapa oziroma bi bil nek file spremenjen). Ideja, da bi stran refreshal v nekih intervalih in preverjal file mi ni prevec vsec :)
    To be or not to be?
    [BISI]

    Administrator

    .::. 03/08/2007, ob 13:22

    No, dejstvo je, da .doc datotek skoraj ne vidis na spletu. Razlog tici seveda v tem, da je format povsem zaprt. Zato se je na spletu uveljavil PDF, ki je sicer tudi zaprt datotecni format, vendar ne tako mocno zaprt kot .doc (tako je mozno brez problemov generirati pdf dokumente).

    Datoteke .doc lahko generiras preko COM razsiritve na Windows platformi, ceprav je to podrocje neodkrito. Druga moznost je, da generiras .rtf datoteke. Obe moznosti pa imata en problem: uporabljati moras predloge (torej, template.doc ali template.rtf), kar pomeni, da nimas nikakrsne svobode pri oblikovanju dokumenta, ampak zgolj zamenjujes stringe. Tretja in zadnja moznost pa je, da generiras navaden html in ga shranis kot .doc. Word namrec podpira html, a do dolocene mere in zelo razlicno med starejsimi in novejsimi verzijami Offica.

    Kar se tice drugega vprasanja, pa je to tipicna naloga za cron job, ki tece loceno od spletne strani. Refreshanju se lahko izognes z uporabo "ajaxa". Vprasanje kaj hoces.
    Life is a workaround...a bad one.
    lambergar

    Član

    .::. 04/08/2007, ob 13:40

    Ja, problem pri vseh teh resitvah je, da na tak nacin dokument lahko (sicer omejeno) ustvaris, ne mores pa ga pregledovati in editirati (ce izvzamemo COM knjiznico)... Vem, da je format zaprt, vendar obstaja OpenOffice, ki zna s .doc formatom ze kar lepo upravljati. In glede na to da je OpenOffice odprtokodnin program sem upal, da bi obstajala vsaj kaksna dostopnja kniznica za delo s temi dokumenti. Oziroma da bi se dalo - vsaj za potrebe pregledovanja dokumentov - ustvariti neko \"fake verzijo\".

    Kar se pa tice cron job-a... cron je spet vezan samo na linux platforme in ravno tej vezavi bi se rad izognil. Mogoce bi bila res edina resitev da bi z javo na vsake par sekund prebral zapise in na podlagi tega dolocil, kaj naj stran naredi... Ceprav bi rad videl, da ukaz poslje server.

    Mogoce se kaksna druga ideja?

    ( racunalnik poslal navodilo! )
    To be or not to be?
    [BISI]

    Administrator

    .::. 04/08/2007, ob 17:09

    Jah, OpenOffice.org je pa povsem druga zgodba, prav tako tudi Microsoft Office 2007 (za MS Office 2000, XP in 2003 obstaja tudi Sunov open document plugin). Prvi podpira open document format, drugi pa office open xml (oba temeljita na xmlju, kar pomeni, da ju lahko brez problemov parsas s phpjem - obstajajo pa tudi knjizice).

    Res je, cron jobi so za linux, na Windowsih pa lahko uporabis servise (Windows Services). Povsem neodvisne aplikacije za Windows in se kak drug operacijski sistem ne mores narediti, ker so si toliko razlicni med seboj (ce bi si bili prevec podobni, bi ze poslusali kaksno o patentnih tozbah - kar pa se tako ali tako ze ves cas dogaja). Streznik sam od sebe ne more posiljati podatkov, ce mu to ne ukazes.
    Life is a workaround...a bad one.
    Forum> programiranje> PHP security
     

    Skok na: