Jump to content
php.lv forumi

Venom

Moderatori
  • Posts

    1,918
  • Joined

  • Last visited

Posts posted by Venom

  1. vairāku failu uploads:

    1) tiešām likt vairākus <input type="file">

    2) ja ir DHTML eneiblots brouseris, var izvadīt vienu <input> un tam blakus "+", uz kā uzspiežot, parādās jauns <input>

    3) rakstīt Java-appletu vai kādu citu programmu, kas nolādējas (NB:incanti skan) pie klienta un iegūst pieeju HDD, resp. izskrien cauri direktorijām, atver socket-savienojumu un pati kačā serverim virsū tos failus. Bet priekš tam ir FTP.

     

    vairāku failu downloads:

    te tev vajadzēs palasīties header() un HTTP specifikācijas, par to, kā php var nolasīt bināros faila datus un nosūtīt to downloadam izmantojot header('Content-type: tāds un tāds'); echo 'failasaturs';

    pēc tam tev ir divas pieejas:

    a) viens skripts nolasa failu nosaukumus un tad ver jaunus logus, katrs no kuriem mēģina piedāvāt nolādēt jaunu failu

    B) tas pats skripts nolasa failu nosaukumus un ar pauzi, atsāk jaunus headerus - visdrīzāk jābūt ieslēgtam output bufferingam, resp: kaut kas līdzīgs

    $file_pointer='fails.viens';

    header('še tev pirmo failu');

    fppassthru($file_pointer);

    flush();

    sleep(5);

    //šeit iespējami jaunā outputa uzsākšana ar kādu ob_start()/ob_close()/ob_flush utt.

     

    $file_pointer='fails.divi';

    header( ...

     

    utt.

     

    visdošākais tomēr izveidot linku sarakstu un lai klients pats nokliko ko viš grib sev saņemt

  2. Bēdīgi, jo bēdīgi, ka pēdējā laikā šajā forumā parādās arvien vairāk wannabe-hackers, vai vismaz kādu, kas pēc tādiem šķiet.

    Man izklausās, ka trinklins grib zināt datus par jebkura viņa saitā ienākošā lietotāja datoru? Un kā tev patiktu, ja katrs saits nāktu iekšā un šustrītu tavu HDD meklējot tajā tās bildītes, ko tu slēp no savas draudzenes?

    Ja gribi uzzināt kaut ko par savu serveri - ir tāda lieta kā Control Panel>System priekš lokālā servera un phpinfo(); un print_r($_SERVER); vai pat print_r($GLOBALS); vairāk nevajag būt zināmam.

  3. 2 pпp: nu ja, un rakstot kodu tu refresho iekš explorera servera temp direktoriju un skaties, vai nav kaut kas "pielogojies" klāt vai kā? un kā pēc tam ar izlikšanu uz servera, kur tu nevari iekš php.ini kaut ko savu noteikt?

    maksimālais, ko es pieļauju ir spēlēšanās ar error_reporting pašā kodā.

     

    Uzspļaut uz to validāciju - kurš normāls cilvēks validēs lapu sekundi pēc tās pārlādes? jo <meta http-equiv="refresh" content="; url=http://"> tiek izmantots kā back-up elements. ja nenostrādā @header() aiziet <meta>, pēc tam var arī <script>location.href=</script> arī pierakstīt - visādam gadījumam. Un <meta refresh> parasti apstrādājās jebkurā lapas vietā.

  4. Nu jā, slikti savā ziņā.

     

    No IIS būtībā var. Ar ASP. Zem 2000šā.

    A bet stāv Apache. Uz Linuša. Bez administrēšanas pieejas man.

     

    2 Roze: nu jā, kā jau teicu stāv kaut kāds apače mods - modauth vai tml., kas pret pamiem čekojas (resp. iekš php parādās funkcija pam_auth()) vai arī var izmantot LDAP konekciju. NTLM mods kaut kad mēģināts likt, bet nekas labs nav panākts. It īpaši uz IE, kas tiek izmantots defaultā. Un tik un tā visos variantos vajadzēja vadīt iekšā ūsername/pwd.

    Bija vēl kaut kāds *.dll, kas uz windowiem pievienoja NT_DOMAIN un NT_USER iekš $_SERVER, bet viņš labi strādāja mājās uz XP, bet uz 2000 lidoja ārā tā, ka vajadzēja Apache pēc tam killot+restartēt.

     

    Lai paliek.

  5. "labāk pārdomāts kods" tik un tā neļaus izvairīties no piem. mail() erroriem, ja nu gadījumā vienkārši nojūdzies mailserveris (sendmail, qmail utt.). Labs stils nerāda kuram katram ūserim php warningus, bet pa kluso tos ieglabā logos un vajadzības labad uzliek cron uzdevumu. tāpēc man nepatīk arī funkcija die(), kas pielīdzināma exit()-am, te nu token varu teikt, ka lapai jābūt izdomātai tā, lai kāds iekšējs errors tomēr atļauti tās izvadi līdz galam (resp., līdz </html>) - kaut vai arī tukšu.

  6. Hm, uzrakstīju aptaujas skriptu, kas identificē lietotājus pēc IP (REMOTE_ADDR, HTTP_X_FORWARDED_FOR, HTTP_CLIENT_IP) - bet reku šeku man tā jāuzliek iekškolas tīklā, kur visiem lietotājiem ir kopīgs DHCP geitweis un IP visiem izrādās vienāds (subnets tāds). Mainās tikai REMOTE_PORT - bet katru reizi pārlādējoties lapai tas ir citādāks - tātad to atsijāšanai nevar izmantot. Cūkiji 1) pēc defaulta visiem atslēgti 20 regulāri tīrās 3) šā vai tā.

    Bet gribētos uzlikt, lai varētu balstot tikai vienreiz. Un lai tas paliktu arī rītdien un parīt (resp. ar sessijām nesanāks).

    Varētu likt ievadīt NT lietotāju loginus/paroles, bet tas atbaidīs atbildētājus.

     

    Vai kādam ir kādi priekšlikumi?

  7. pamatpieeja šamai problēmai ir sadalīt skaitli pēc desmitrangiem:

     

    1234 = 1*1000+2*100+3*10+4

     

    attiecīgiem skaitļiem 0-9 izvedo masīvu ar nosaukumiem (divi,trīs...)/rangu nosaukumiem (div,četr - priekš + desmit), un pēc tam pieapstrādā dažādus izņēmumums, piem.: 1 pieliekams "tūkstotis","simts" pārējiem - "tūkstoši","simti".

     

    attiecīgos rangus var tālāk sadalīt pēc tās pašas sistēmas (xx tūkstoši. xxx tūkstoši).

     

    PS>gūglei ir daudz šādu skriptu gan krievu gan citam valodām, tā kā var vienkārši pārtulkot.

  8. print() vietā iesaku izmantot echo().

    pilnībā piekrītu. Kapēc:

    1) īsāka rakstīšana (i.i. VenPadā izmantojot Ctrl+Up)

    2) ar echo raxtīt paliekošo izvadinformāciju, ar print un paveidīgiem (print_r()) - debugošanas infor (ņu, piem. lai paskatītos, kāda vērtiba ir šamajam vai jamajam variāblim).

    3) print un paveidīgie (sprintf, printf un kā tur vēl) ir daudz jūtīgāki pret atstarpju u.c. speczīmju lietošanu - ja echo izvada izvadu un ļauj pašam pārlūkam to nowrapot, print bieži "iededzina" speisus ar "nestandarta" charkodiem un ierakstīts gestbukā garš teikumiņš izlaužas cauri box-elementa noteiktām robežām pēc savas vēlmes to paplašinot pa labi un vienā rindiņā.

     

    tas nu tā, t.s. code manifest daļiņa.

  9. mjā, ir arī tāda lieta, kā google.lv un šī foruma meklis

     

    zini kā programmās notiek filtrēšana? ar

    `colonna`='vērtība'

    vai `colonna` LIKE 'vērtība', kur LIKE gadījumā iekš vērtības varētu atrasties t.s. wildcards:

    % - 0 vai vairāk zīmju (DOS analogs *)

    _ - 0 vai viena zīme (DOS analogs _)

     

    kolonnas vērtība, kas sākas ar 'php':

     

    SELECT * FROM table WHERE `column` LIKE 'php%'

     

    Ja ļoti svarīgs burtu reģistrs, izmanto norādi BINARY, kas salīdzina nevis "burtus", bet "datus". Var būt dažādas problēmas ar citvalodu burtiem, piem ar krievu 'ju' burtu, kas pēc vienkāršotas ASCII tabulas var sakrist ar latvju "sh" char-kodu utml. Ar UTF-8 (u.c. MBS) stringiem un case-insensivity pagaidām ne visai.

     

    p.s.> vēlāk MySQL manuālī var palasīties, kas ir FULLTEXT search un SOUNDEX metodes.

     

    NB> nākamais jautājums būs, kā atrastos rezultātus sadalīt pa lapām ;)

  10. ... SID='.session_id().' ...

     

    tur nu tiešām nevajadzētu likt - jo url_rewrite tieši nosaka pie kādiem tegiem pierakstāms SID un iekš php.ini session_id() nu tiešām nestrādā.

     

    pamēģini parefreshot šito:

     

    <?php

    if (!session_id())

    session_start();

     

    echo session_id();

     

    echo '<pre>';

    print_r($_SESSION);

    echo '</pre>';

     

    $_SESSION[]=gmmktime();

    ?>

     

    pa rokai nav php.ini

     

    pirmajā rindiņā redzēsi, vai mainās sessiju identifikators - ja tas "2389645uygsdv" mainās - tad tef katru reizi veras vaļā jauna sesija. Apsk. php.ini session_autostart vai kaut ko tml. => uz 0/false;

     

    tālāk ar katru refrešu jābūt vairāk un vairāk datu, ja tā nav, bet sessijas ID ir stabils, tad varētu būt, ka tavs HDD/Apache nepaspēj ierakstīt mainīgos sesijā (reti, bet gadās).

     

    ko vēl var darīt - iekš $_REQUEST arraya var atrasties sessijas ID, no kuras ienākts lapā (apskatāms ar print_r($_REQUEST)) - tad viens no variantiem ir manuāli atsākt sessiju ar iepriekšējo identifikatoru, ķipa;

     

    session_id($_REQUEST['SID']); //liekam izmantot veco "failiņu"

    session_start();

  11. Gacham žetons! Sāk parādīties sakarīgas atbildes.

     

    Par to phpBB un profesionalitāti, apstrīdējams jautājums. Ja esi nodarbojies ar modu pielikšanu/rakstīšanu priekš viņa, diez vai būs kas labs sakāms.

     

    /me domā, ka vislabāk neļaut lasīt failus no šāda veida ir:

    1) izmantot .htaccess, kurā salikt, ka neviens cits, izņemot pašu serveri savām vajadzībām, nevar nolasīt citus failus, izņemot index.php

    2) iekš "apakšfaila" čekot refereri un ja tas nav zināms, vai nepieder domēnam - taisīt header un meta refresh uz sākuma lapu - gaužam labāk par trulu "tu esi iekulies ne tur kur vajag, tāpēc es tevi saukšu par hackeri". Jo apakšlapas tiek indeksētas no visādu gūglu puses un tad nu token nav pamata saukt ūzeri, kas meklējot kaut-ko no gūgles ielinkojies tavā lapā ne tur, kur vajadzētu.

    u.tt. u.tml.

  12. tiem validātoriem arī diez ko uzticēties nevar.

    man piem. tidy stipri brēc, ja outputā ir skripts, kurš atver logu un pēc tam tajā ieraksta uz-clicka-aizvērošos attēlu, resp.

    nw=window.open('','');

    nw.document.close();

    nw.document.write('<html>...</html>'); - bļauj virsū kā / nevar atrasties aiz < visos tgos pēc atverošā <title> (resp. neļauj izrakstīt </title>,</body>,</html>).

     

    Par w3c validātoru arī tenkas dzirtētas.

  13. laikam kaut kā tā:

     

    SELECT DISTINCT `string`,COUNT(`string`) as `skaits` FROM table GROUP BY `string` ORDER BY `skaits` DESC

     

    incanti, kā izskatīsies SQL tulkojums iekš tās lv:

     

    IZVĒLĒTIES NEATKARTOJOŠOS `string`,SKAITU(`string`) kā `skaits` NO tabulas SAGRUPĒT VIENĀDUS `string` IZKĀRTOT PĒC `skaits` DILSTOŠI

  14. BTW: warningā tev stāv, ka ir session cookie, iekš php.ini attiecībā uz session_use_cookies kaut kas ir sakāms

    Un vēl - cerams, ka otro failu tu ver vaļā pirmā faila pārlūka loga atvasē - vai nu ar linku, vai ctrl+n, citādi tev veras vaļā _divas_ sessijas - katram browsera logam.

    Iztīri c:/temp, ienāc lapā un paskaties, vai tempā uzradies failiņš ar 32 ķēburu nosaukumu. Ja pārejot uz otru lapu tev tur parādās cits, tad tev verās vaļā jauna sessija. RFisinājums: jāapskata pāriešanas mehanisms; php.ini settingi; sessijas id jānodod pašrocīgi - iekš php.ini nodefinēts mainīgais PHPSESSID, vai SID, pie katra linka jāliek klāt ?...&SID='.session_id().', ja serveris to nedara pats (iekš php.ini tas arī norādams - rewrite_tags vai tml.).

  15. Vot tieši tā debugošana mani besī. Priekš php labākais debugs globals=off, error reporting=E_ALL, save+refresh ;) un tad lasam kļūdu paziņojums.

     

    Paskaties, vai tev ir nodefinēts kur atrodas php un vai tu php vari palaist "vienkārši" bez dažnedažādiem kļūdu paziņojumiem. respektīvi, iekš command line aizraujoties līdz apaches diram un pastartējot apachi, vai līdz php diram un iesitot php+enter (āmen!) nelec laukā kādi "could not find *.dll", ja lec, parasti tos jāatrod jamo apakšdirektorijās un jāsamet kaut kur tuvāk, - tajā pašā direktorijā, kur *.exe, iekš win\system32, vai vienkārši nodrazot uz c:\.

    Pats Komodo var arī startēt kaut kādu savu mistisko httpd serveri un debugošanu, kas vel ilgāk, nekā čekojot sintaksi ar php.exe pārseri.

  16. paņem kādu TheBat, aizsūti pats sev mailu un paskaties maila _sourcus_. Visbūtiskākais - noteikt pareizu Content-Type un unikālu boundary stringu, ar kuru tad atdalāms texts no attachmentiem. Faila saturs nolasāms bināri un nokodējams pēc base 64 (pierasti). Te man reku nāk vīruss:

     

    Return-Path: <[email protected]>

    Delivered-To: [email protected]

    Received: (qmail 7802 invoked from network); 25 Feb 2004 19:47:06 -0000

    Received: from unknown (HELO hello.lv) (80.233.142.221)

    by balodis.latnet.lv with SMTP; 25 Feb 2004 19:47:06 -0000

    From: [email protected]

    To: [email protected]

    Subject: hello

    Date: Wed, 25 Feb 2004 21:48:27 +0200

    MIME-Version: 1.0

    Content-Type: multipart/mixed; boundary="00660181"

     

    --00660181

    Content-Type: text/plain; charset=us-ascii

    Content-Transfer-Encoding: 7bit

     

    //te ir texts

     

    I have your password!

     

    //taalaakais boundary piemineejums "iesleedz" jaunu mailas sadaļu, šeit - zip fails.

     

    --00660181

    Content-Type: application/x-zip-compressed; name="location.zip"

    Content-Transfer-Encoding: base64

    Content-Disposition: attachment; filename="location.zip"

     

    UEsDBAoAAAAAAA2eWTBdbrAiAFYAAABWAAAMAAAAbG9jYXRpb24ucGlmTVqQAAMAAAAEAAAA

    ...

    DAAAAAAAAAAAACAAAAAAAAAAbG9jYXRpb24ucGlmUEsFBgAAAAABAAEAOgAAACpWAAAAAA==

     

    --00660181--

     

    mails izbeidzas. Par to pasaka '--' aiz noslēdzošā boundary stringa.

×
×
  • Create New...