Nori gauti straipsnius el. paštu - Prenumeruok

Straipsniai sukurti 2005.09

PHP saugumas, kontaktų forma?

Dažnai svetainėje būna kontaktų forma aka sussisiekite su manimi. Tai daroma ne tik asmeninėse svetainėse, bet ir daugelyje rimtų svetainių. Atrodo labai simple programėle, ir koks tai gali būti blogis? Blogi žmonės gali pasinaudoti kaip SPAMinimo įrankiu, ir tols dalykas vadinamas Email Injection.

Kaip tai veikia galima pasiskaityti svetainėje http://securephp.damonkohler.com/index.php/Email_Injection.

PHP manualas:

Usage:
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] )
Purpose: Send mail
Availability: PHP 3, PHP 4, PHP 5

taigi kaip mažas pavyzdys, ką galima padaryti jei nedarai apsaugų.

Įsivaizduokim kad be jokios validacijos padaryta programa, kuri turėtų isiųsti komentarą:

<?php mail(“gavejas @ esu.as”,”Pavadinimas”,”Labas,ncia atsiliepmas.niki”,”From: siuntejas @ esu.asn”); ?>

//nevalidavus tarkim eina

<?php mail($_POST[‘gavejas’],$_POST[‘pavadinimas’],$_POST[‘[pavadinimas’],”From: $_POST[‘siuntejas’]n”); ?>

Jeigu tarkim galima pagauti keisti gavėją, galima pridirbti štai ką:

“gavejas @ anonymous.www%0ACc:gavejas2cc @ someothersite.xxx%0ABcc:gavehas3 @ grrrr.xxx, gavejas4 @ oooops.xxx”

ir jau automatiškai prisidės papildomų gavėjų :)

taigi nepamirškit pastudijuoti anksčiau minėta nuorodą ir daryti validavimą, kurį kartais gali pamiršti :)

 

PHP upload galimas bugas tavo kode ir backupu import/export idėja

Daugelis pradeda programuoti ir saugumo savo “programėlių” mažai rūpinasi, vien iš nežinojimo. Kuo daugiau patirties tuo paprastesni uždaviniai sprendžiami turėtų kuo sudėtingiau. Bent taip esu susidaręs nuomone, kur seniau problemos nematydavau, dabar atorodo uch… problematiška.

Štai keletas pavyzdžių, ką gali padaryti su jūsų paliktom “klaidelėm” ir pan.

Kartais padaro programėlė, kuri leidžia bilekam uploadinti failus. Tarkim nuotraukas ir kitus failus. Ir neduok dieve palikta galimybė uploadinti bile kokio tipo failą, tuo galima pasinauti ir dar kaip.
Tuo pasinaudojau ir aš, bet jau uždaroje zonoje, buvau pamiršęs FTP slaptažodį, o reikėjo iš tos svetainės atsinaujinti failus, ir pasiimti naujausią SQL dumpą. Na ką? Jei galima uploud oadaryti bilekokį failą, tai vadinasi galima įkelti ir PHP skriptą, tarkim pavadinkim job.php. Ką galima su juo padaryti? Ogi labai daug! Ypač nusimanantiems. Taigi pasinaudojas ta upload galimybę susizipavau visą direktoriją, ir parsitempiau į kompiuterį. Kitas dalykas reikėjo SQL dumpo, tai irgi pasirodo paprasta, suzinojus kur mėtosi mysqldump, ir žinant mysql slaptažodį laisvai galima pasidaryti dump, ir gal net taip patogiau.

Kaip tai veikia?

Ogi gan paprastai, pasinaudojus php komanda system

system() is just like the C version of the function in that it executes the given command and outputs the result.

The system() call also tries to automatically flush the web server’s output buffer after each line of output if PHP is running as a server module.

Taig bandom;

galima panagrinėti failų struktūra, kaip pavyzdys ls -la komanda, ir t.t. Žiūrint ko jums reikia. Tos komandos jums veiks tarkim *nix serveryje net jei nėra galimybės prisijungti prie shh.

Taigi elementarios eilutės:

<?
set_time_limit(0);
$str = “ls -la”; // pasirinkta komanda
echo system($str);
?>

Taigi keletas kitų naudingų komandų. Taigi galima suzipuoti direktoriją, gauti mysql dumpus ikelti mysql dumpą ir pan, ko tik prireiks.

Keletas svarbių komandų. Daugelis naudoja phpmyadmin’ą kuriuo įkelia lentelę, didelė problema būna kad upload failas limituotas. Standartiškai būna 2MB, o dažnai dideli projektai saugo daugiau nei 2MB duomenų, tad koks backup.sql failas gali būti didelis ir juo neįkelsi per phpmyadminą. Patogiausia naudotis per ssh mysqldump ir mysql komandomis. O kai neturi galimybės ssh turėti gali ir pats greitai pasirašyti simple komandas. Tai gali būti naudojama ir backupų darymui (import/export);


Įkelti sql dump failą 
/path/to/mysql -u USER -pPASSWORD DBNAME < /path/to/dir/dumpas.sql

Eksportuojam dump failą
/path/to/mysqldump -u USERNAME -pPASSWORD DATEABAE > /path/to/dir/dumpas.sql

 taigi pasinaudojus system(), laisvai importuosim/eksportuosim failus. o jei jau palikai spragą upload skripte kenkėjas ne tik gali parsisiųsti visus failus tavo direktorijoje, bet ir užvaldyti serveriuką. Dėl to turėtų pasirūpinti serverio administratoriai bei programuotojai, kad tokios klaidos nevelti.

PHPArch 2005, rugsėjis

Dar vienas mėnesiukas ir dar vienas PHP architekto numeriukas. Mano nuomone šis numeriukas per daug neįpatingas, bet mini apžvalga leis jums nuspręsti. Stipriai dar nestudijavau ir kažkaip nėra laiko versti tad nepykite jad beveik viskas orginalo kalba.

Input filtering, part 3


 This month’s installment of Tips & Tricks concludes the series on filtering input, providing practical examples and helpful tips to filter input using regular expressions, test for the length of data, and ensure acceptable values.

Saugumo skyrelis “Input filtering, part 3”, beveik nieko naujo, bet visdėlto beveik. Aprašytos “Character Type Functions” funkcijos ir jų panaudojimas duomenų apdorojimui.

PHP manualas:
The functions provided by this extension check whether a character or string falls into a certain character class according to the current locale

Pagal manualą vienas iš pavyžių:

<b>PHP manualas:</b><br />&lt;?php<br />$strings = array('AbCd1zyZ9', 'foo!#$bar');<br />foreach ($strings as $testcase) {<br />&nbsp; &nbsp;if (ctype_alnum($testcase)) {<br />&nbsp; &nbsp; &nbsp; &nbsp;echo "The string $testcase consists of all letters or digits.n";<br />&nbsp; &nbsp;} else {<br />&nbsp; &nbsp; &nbsp; &nbsp;echo "The string $testcase does not consist of all letters or digits.n";<br />&nbsp; &nbsp;}<br />}<br />?&gt;

Atsakymas:

The string AbCd1zyZ9 consists of all letters or digits.<br />The string foo!#$bar does not consists of all letters or digits.

 

Roll Your Own Database Abstraction Module


 You may already use database abstraction in your applications, perhaps through one of the available data-base abstraction layers, such as PEAR::DB, or PDO (see the PDO article in this issue), but what about various idiosyncrasies in the actual SQL? Perhaps you’ve never even considered this problem. This article will help you the data abstraction beast.

An Introduction to PDO


 A common complaint of the anti-PHP “expert” is the lack of a bundled, uniform database access component. With the advent of an improved object model, in PHP 5.0, a few of PHP’s core developers decided that the time has come to fill this hole with PHP Data Objects (PDO). The package, itself, has been in PECL for quite a while, now, but with the upcoming release PHP 5.1, PDO will be bundled in the main PHP distribution. What does it do? How does it work? One of PDO’s main developers, Ilia Alshanetsky, explains.

 What Are Trackbacks And Why Do They Exist


 if you’ve been around the internet for any length of time, chances are you’ve seen a weblog. Chances are, if you’ve seen a weblog, then you’ve seen a trackback. You might not have known it at the time or even understood what it was, but more and more of the blogging tools out there are using them. So, what are these elusive trackbacks and why do they even exist?

End-to-End Testing with PHP and Internet Explorer


 Automated testing can greatly improve the quality of your product. In this article, Oz presents a framework for creating automated tests that can simulate end-user activity. By leveraging the full faculty of Internet Ex-plorer, these tests can do just about anything that your users can do.

 Test Pattern: State of Confusion

Bug-free code is code you can understand completely. Unfortunately, it doesn’t take much to cause us uncertainty. Even a small amount of complexity will place demands on our memory, and our memory is extremely limited. If we tax our brains, we will get bugs. Marcus Baker examines how the number of bugs in a piece of code can be correlated to its readability.

 

Omnitel paslaugos

Jau nepirmą kartą matosi, kad omnitelio darbuotojai neviską nutuokia apie savo pačių teikiamas paslaugas. Pirmas niuansas susidūriau kai atsirado jų paslauga OmniGo. Tipo skelbia, kad nauja pasaluga ir pan, o man neveikia. Nuėjau per pietus į saloną, kokį pusvalandį vadybininkas maigė, neradęs nuėjo pas kolegą ir nerado sprendimo. Po kokio mėnesio išaiškėjo, kad tereikėjo proxy port irašyti. Mat jų svetainė wap.omnigo.lt yra labai virtuali. Prieinama tik omnitelio vartotojams.

Dabar vėl žiūriu neveikia paslauga. Ir jų reklamuojamas naujasis Omni SurfPoint svetainė. Prisijungus meta pranešimą. “Įvyko klaida, jei klaida kartosis kreipkitės telefonu 1533”. Nu jo manau vėl kažką kreivai prigamino omnitel programeriai. Tipo nori paslėpti nuo kitų tinklų ar labai jau taupo tuos keliasdiešimt litų už domeno adresą.

Nuėjęs į saloną vėl vadybininkas maigo maigo… neveikia. Kaip suprast? Nejaugi ant tiek kreivos tų programerių rankos?

Beja visi kiti puslapiai, wap xhtml , html veikia. Nesekmės su Nokia 6600.

Pagalbos: Subversion ir ignore

Bandau vienam projektui pritaikyti Subversion. Kolkas subersion instaliavias pas save kompiuteryje, vėliau tikiuosi bus suinstaliuotas mūsų serveryje, na jei žinoma sakysiu kad būtina.

Pirmas įspūds patiko naudinga ir pan. Bet visdėlto susidūriau su problemomis. Pirma projektas labai didelis (firmos informacinė sistema), tad ten su visokiais modulių didžiulė krūva failų. Taigi kokios problemos:

  • Laikini failai (tarkim smarty kešavimo failiukai)
  • Dokumentų modulį esantys failai
  • ir pan.

Man tikrai nereikia kad tie failai būtų subversios kontrolėje. Paprasčiausia norisi ignoruoti juos. Bet pvz direktorija privalo būti, o joje visų failų arba pagal tam tikrą požymį (*.doc) neturi. Kažkaip nesiseka surasti kaip padaryti ignoravimą. Gal kas susidūrę ir gali paaiškinti kaip tą ignoravimą relizuoti?

Su programerių švente. Jums “dovana” Zend studio 5.0 beta

Pagal programerių paskaičiavimus šiandien yra programerių profesinė švėntė, dėl to sveikinu Visus jus kolegas.. ir pats save.

O kagi kokia dovana? Čia jau specialiai PHP gerbėjams, fanams ir naudotojams. Neoficiliai išėjo Zend Studio 5.0 beta. Slapta nuoroda http://www.zend.com/store/products/zend-studio/beta.php?bz=712

Kas naujo?

Zend Studio 5.0 Beta introduces a host of improvements including greater stability, enhanced performance and many user-requested features–for a full list see Technical Changes.

Zend Studio 5.0 Beta’s major new features:

  • NEW – Web Services Support: Easily generate WSDL files directly from your PHP source code and parse existing WSDL files for Code Completion integration and Inspection View.
  • NEW – Subversion Integration: Seamlessly integrate between Zend Studio and subversion source control with this top user-requested feature.
  • NEW – Code Folding: Be more productive by easily folding classes, functions, PHPDoc blocks and non-PHP code.
  • NEW – Go to PHP Resource Utility: Quickly navigate to any PHP resource in the Project with filtering by classes, functions and constants.
  • NEW – FTP over SSL Support: Securely browse your FTP connection using SSL with Implicit and Explicit methods.
  • NEW – Internet Explorer Integration: Directly view and debug your application in Zend Studio’s internal browser.
  • NEW – Nested PHP Code Completion: Develop faster with new nested Code Completion support for a variety of PHP elements (functions, variables, etc.).

Man tai patiks :) Nes darbe naudoju Zend Studio kaip pagrindinį redaktorių. Ką gi liko nedaug MB parsisiųsti ir testuosim naują versiją.

Paskutinė rugsėjo 1d.

Šiandien paskutinė rugsėjo 1 diena man. Paskutiniai metai (tiksliau pusmetis) universitete. Jei viskas bus gerai…. pasiemes magistro diplomą, toliau jau nesikankinsiu.

O šaip visus sudijuojančius ir studentaujančius su rugsėjo 1.