Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Łukasz Socha, dodany: 20.02.2015 18:14, tagi: php

W ostatnim artykule pokazywałem w jaki sposób można wstrzyknąć komendy systemowe (shell injection) do kodu aplikacji. Równie dobrze można wstrzyknąć kod PHP. Zobacz na czym polega metoda ataku code injection i jak się przed nią zabezpieczyć :). Trochę teorii Code injection polega na dołączeniu dowolnego skryptu PHP do wnętrza web aplikacji. W niezabezpieczonych stronach www […]

Autor wpisu: Pyton, dodany: 20.02.2015 08:00, tagi: php

Wraz z wydaniem Laravel 5 zniknęła z artisana jedna przydatna komenda: workbench. To dzięki niej w 4 mogliśmy bardzo łatwo tworzyć paczki. A jak tego dokonać w wersji 5? Pokażę Wam dość prosty sposób.

Przygotowania

Wpierw musimy sobie pobrać najnowszą wersję Laravela:

composer create-project laravel/laravel forPackages

Gdy będziemy mieli nasze gotowe podstawowe środowisko pobieramy paczkę Workbench.

W tym celu do pliku composer.json dodajemy:

"illuminate/workbench": "dev-master"

i robimy

composer update

Na końcu musimy utworzyć plik config/workbench.php

<?php

return [
    /*
    |--------------------------------------------------------------------------
    | Workbench Author Name
    |--------------------------------------------------------------------------
    |
    | When you create new packages via the Artisan "workbench" command your
    | name is needed to generate the composer.json file for your package.
    | You may specify it now so it is used for all of your workbenches.
    |
    */
    'name' => 'Imie Nazwisko',
    /*
    |--------------------------------------------------------------------------
    | Workbench Author E-Mail Address
    |--------------------------------------------------------------------------
    |
    | Like the option above, your e-mail address is used when generating new
    | workbench packages. The e-mail is placed in your composer.json file
    | automatically after the package is created by the workbench tool.
    |
    */
    'email' => 'adres@emai.pl',
];

Tworzenie fundamentu

Gdy mamy już potrzebne narzędzia tworzymy szkielet dla naszej paczki. W konsoli:

php artisan workbench Pyton/TestPackage

Przeważnie vendor to login z GitHub lub czegoś innego a package to nazwa naszej paczki. Utworzy nam się katalog /workbench

workbench/
└── pyton
    └── test-package
        ├── composer.json
        ├── composer.lock
        ├── phpunit.xml
        ├── src
        │   └── Pyton
        │       └── TestPackage
        │           └── TestPackageServiceProvider.php
        ├── tests
        └── vendor

Przedostatnim krokiem jest edycja pliku composer.json w katalogu główny Laravel (nie tego w paczce) i dodanie do sekcj psr-4:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: matipl, dodany: 10.02.2015 11:45, tagi: php

trojmiasto.pl - pdo exception (job offer)

Serwis Trojmiasto.pl to regionalny portal informacyjny, z własną redakcją która nie powiela niusów z Wyborczej. I to sobie cenię. Ale wymyślili coś tragicznego IMHO.

Niestety ktoś chciał być zabawny, albo ekipa serwisu bardzo poszukuje pracowników i wymyślili powyższą formę reklamy prezentując na stronie głównej poniższy exception:

PDOException: SQLSTATE[28000] [1045] Access denied for user 'phpdeveloper' (using password: 'needed.now') in /html/source/4/details.inc.php on line 75

1. 0.0004	130048	__construct ( )	../bootstrap.inc.php:27

Ekipa Trojmiasto.pl uważa, że plucie czymś takim czytelnikom to dobry pomysł. Jasne. Nie jest to dobre rozwiązanie, ani dla Czytelników ani dla potencjalnych kandydatów. Dlaczego to co widać powyżej jest kiepskie z punktu widzenia programisty PHP?

  1. Włączony debugger na produkcji to jedno z najgorszych rozwiązań jakie można zastosować. Dochodzimy do wniosku, że testują wszystko jak wlezie na produkcji i nie znają obecnych rozwiązań do monitorowania produkcji.
  2. Kod serwisu pachnie kodem proceduralnym sprzed 10 lat gdy nie oddzielało się logiki biznesowej od kwestii widoku. Dla człowieka na polskich studiach może jest to okej, albo jest sprzeczne z obecnymi trendami w PHP.
  3. Na podobny archaizm wskazują nazwy plików .inc.php, gdzie żyjemy w czasach wzorców projektowych, SOLID, etc.

Że nie jest to faktycznie rzucony błąd przez PHP dochodzimy do wniosku, dopiero gdy pomyślimy że jesteśmy Frontend Developerem i zajrzymy do kodu HTML (Backend Developera to nie interesuje):

Trojmiasto.pl - source code

w postaci tekstowej prezentuje się następująco:

<!-- phpdeveloper? join us! mail('warningadv@trojmiasto.pl', 'phpdeveloper', $cv.$short_desc); --></pre>
<table id="warningadv" dir="ltr" border="1" cellspacing="0">
<tbody>
<tr>
<th colspan="6" align="left" bgcolor="#dddddd"><span style="background-color: #cc0000; color: #fce94f; font-size: large;">( ! )</span> PDOException: SQLSTATE[28000] [1045] Access denied for user 'phpdeveloper' (using password: 'needed.now') in /html/source/4/details.inc.php on line <i>75</i></th>
</tr>
<tr>
<td align="center" bgcolor="#dddddd">1</td>
<td align="center" bgcolor="#eeeeec">0.0004</td>
<td align="right" bgcolor="#eeeeec">130048</td>
<td bgcolor="#eeeeec">__construct ( )</td>
<td title="common/bootstrap.inc.php" bgcolor="#eeeeec">../bootstrap.inc.php<b>:</b>27</td>
<td align="right" bgcolor="#eeeeec"><button title="zamknij" type="button">x</button></td>
</tr>
</tbody>
</table>
<pre>
<script type="text/javascript">// <![CDATA[
    function warningadv() {
        document.cookie = 'warningadv=1000;path=/;domain=trojmiasto.pl;expires=Sun, 1 Mar 2015 12:00:00 UTC;';
        document.getElementById('warningadv').style.display = 'none';
        document.getElementById('warningadv').hidden = true;
    }
    
// ]]></script>

Technologie frontendowe są dla mnie nieco odległe, ale ten kod również bardziej odstrasza niż przyciąga. Obecnie tak się nie programuje, ani na frontendzie, ani backendzie. W dzisiejszych aplikacjach wszystko jest oddzielone od siebie, zbudowane z klocków… Pozostaje podziękować, że człowiek patrząc na ten kod i debugger mógł się poczuć jak 10 lat temu ;)

Autor wpisu: Łukasz Socha, dodany: 03.02.2015 14:26, tagi: php

Metoda ataku Shell injection (znana także jako Command injection) polega na wstrzyknięciu komendy systemowej przy wykorzystaniu funkcji PHP takich jak exec(), system(), shell_exec(), passthru(). Trochę teorii PHP umożliwia wykonanie za pomocą np. funkcji exec() komend systemowych serwera. Jeżeli w argumencie funkcji zostaną wstawione nieprzefiltrowane dane od użytkownika (np. z tablicy GET lub POST) może on […]

Autor wpisu: Kamil Adryjanek, dodany: 02.02.2015 22:22, tagi: php, symfony2

CRATE with Symfony2 Today I want to introduce to you great elastic data store Crate.io that I was working with lately. CRATE is a new way of building scalable applications: “Crate takes care of synchronization, sharding, scaling, and replication even for mammoth data sets.” Also I’m going to show how easily we can integrate it with PHP / Symfony2 framework – if we can call setting new DBAL driver as integration.

Post Using CRATE with Symfony2 pojawił się poraz pierwszy w Kamil Adryjanek.

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.