konto usunięte

Temat: PHP QUIZ

Ja odstąpię swoją kolejkę, mam dzisiaj masę pracy, a do tego GL mi strasznie muli :(
Marcin Staniszczak

Marcin Staniszczak Programista Python

Temat: PHP QUIZ

Nikt się nie piszę to znowu ja. Co zwróci:

<?php
$t = '2003/02/30';
var_dump(strtotime($t));
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: PHP QUIZ

ale to żadne zadanie, bez myslenia wystarczy odpalic php :)

http://ideone.com/lmi69
Marcin Staniszczak

Marcin Staniszczak Programista Python

Temat: PHP QUIZ

Jest zadanie;-) Nie spojrzałeś na datę i poszło Ci łatwiej;-) Ty następny ;-)
Ja bym pomyślał o jakim false/null/error ;-)Marcin Staniszczak edytował(a) ten post dnia 27.04.10 o godzinie 12:29
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: PHP QUIZ

e tam :) jak dla mnie zadanie powinno byc takie, ze nie mozna go rozwiazac po prostu odpalając kod z zadania.

to ja mam teraz zadanie nietypowe, bo bez kodu :)

wyobraź sobie ze pracujesz jako programista jakiegoś opensource CMSa. wlasie rozpoczęła się dyskusja nad stylem kodowania. część z dyskutantów twierdzi, że pliki skryptów php powinny być zawsze zakończone znaczkiem ?> (jeśli po ostatniej komendzie php nie ma oczywiscie jakiegos dalszego kodu html), a część uważa żeby skrypty po prostu kończyły się ostatnia komendą bez zamykania bloku php.

podaj po jednym argumencie za zamykaniem ?> w takim projekcie i przeciw zamykaniu.
Marcin Staniszczak

Marcin Staniszczak Programista Python

Temat: PHP QUIZ

Za:
- np. taki jEdit krzyczy jak nie ma ?> ;-)

Przeciw:
- jedna linia/znak za ?> i mamy błąd np. przy wysyłaniu nagłówków bez ob_start(). Brak ?> nie daje nam żadnych znaków które mogły by się przypadkiem znaleźć na końcu pliku (głównie chodzi o puste linie).
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: PHP QUIZ

Przeciw: trafiłeś :)

Za: tu się sam zamotałem... :)

Miałem argument taki, że często w programach opensource są próby ataków przez doklejanie do konca pliku kodu ulatwiajacego przejecie strony. Ale po przemysleniu wymyslilem ze wstawienie ?> w zaden sposob przed tym nie uratuje :)

wiec niech bedzie ze jEdit, wygrales i zadawaj ;)
Marcin Staniszczak

Marcin Staniszczak Programista Python

Temat: PHP QUIZ

Mamy:


<?php
$arr = array('ala', 'ma', 'kota');
print_r($arr);
unset($arr[1]);
print_r($arr);


co zwraca:


Array
(
[0] => ala
[1] => ma
[2] => kota
)
Array
(
[0] => ala
[2] => kota
)


Jak naprościej po unset osiągnąć zamiast:

Array
(
[0] => ala
[2] => kota
)

to:

Array
(
[0] => ala
[1] => kota
)

konto usunięte

Temat: PHP QUIZ

array_values()
Marcin Staniszczak

Marcin Staniszczak Programista Python

Temat: PHP QUIZ

Zgadza się:-) Teraz Ty ;-)

konto usunięte

Temat: PHP QUIZ


$block = null;
$id = $_GET['id'] ?: 0;

if ( !isset( $block )
&& is_numeric( $id )
&& $_SERVER['SERVER_NAME'] == 'nasz.serwer.example.pl' )
{
pokaz_tajne_dane( $id );
}


Co tu jest niedobre, niebezpieczne, niewłaściwe?

// EDIT: poprawka formatowania kodu

// EDIT: Wpisanie http://nasz.serwer.example.pl/?id=5 powinno pokazać nam tajne dane o id=5.Łukasz Karpuć edytował(a) ten post dnia 27.04.10 o godzinie 16:10
Bartłomiej Ogryczak

Bartłomiej Ogryczak Backend Developer @
Layar

Temat: PHP QUIZ

Łukasz Karpuć:

$block = null;
$id = $_GET['id'] ?: 0;

if ( !isset( $block )
&& is_numeric( $id )
&& $_SERVER['SERVER_NAME'] == 'nasz.serwer.example.pl' )
{
pokaz_tajne_dane( $id );
}


Co tu jest niedobre, niebezpieczne, niewłaściwe?

Coś poza użyciem is_numeric() zamiast is_int()?
Maciej W.

Maciej W. a czy ty masz swój
ręcznik?...

Temat: PHP QUIZ

?: 0;

tutaj jeszcze chyba czegoś brakuje:>
Krzysztof Szelążek

Krzysztof Szelążek Senior .net
Developer

Temat: PHP QUIZ

Łukasz Karpuć:

$block = null;
$id = $_GET['id'] ?: 0;

if ( !isset( $block )
&& is_numeric( $id )
&& $_SERVER['SERVER_NAME'] == 'nasz.serwer.example.pl' )
{
pokaz_tajne_dane( $id );
}


Co tu jest niedobre, niebezpieczne, niewłaściwe?

// EDIT: poprawka formatowania kodu

// EDIT: Wpisanie http://nasz.serwer.example.pl/?id=5 powinno pokazać nam tajne dane o id=5.Łukasz Karpuć edytował(a) ten post dnia 27.04.10 o godzinie 16:10

1. W 2 lini powinno byc $id = $_GET['id'] ? $_GET['id'] : 0;
2. is_numeric( $id ) dla $id = 0 jest zawsze true
Bartłomiej Ogryczak

Bartłomiej Ogryczak Backend Developer @
Layar

Temat: PHP QUIZ

Maciej Wróbel:
?: 0;

tutaj jeszcze chyba czegoś brakuje:>

"Since PHP 5.3, it is possible to leave out the middle part of the ternary operator. Expression expr1 ?: expr3 returns expr1 if expr1 evaluates to TRUE, and expr3 otherwise."

konto usunięte

Temat: PHP QUIZ

Bartłomiej Ogryczak:

Coś poza użyciem is_numeric() zamiast is_int()?

Poza ;)

konto usunięte

Temat: PHP QUIZ

Krzysztof Szelążek:

1. W 2 lini powinno byc $id = $_GET['id'] ? $_GET['id'] : 0;
2. is_numeric( $id ) dla $id = 0 jest zawsze true

1. Nie powinno ;) (dla wersji < 5.3 tak)
2. Być może, ale dla innych niekoniecznie.

Pytanie głównie o kwestie zaufania do danych

// edit: uściślanie ;)Łukasz Karpuć edytował(a) ten post dnia 27.04.10 o godzinie 18:29
Bartłomiej Ogryczak

Bartłomiej Ogryczak Backend Developer @
Layar

Temat: PHP QUIZ

Łukasz Karpuć:
Pytanie głównie ociera się o bezpieczeństwo danych i tego, co wyświetlamy, i komu :)

// lub precyzyjniej - o kwestie zaufania do danych

1. zewnętrzne ID powinny być hashami, dajmy na to sha1($id.$sekret) albo jeszcze lepiej sha1($id.$sekret.$userId)
2. puszczanie tajnego ID w URL-u nie jest dobrym pomysłem

No, ale to chyba nic konkretnie z PHP.

konto usunięte

Temat: PHP QUIZ

Bartłomiej Ogryczak:
Łukasz Karpuć:
Pytanie głównie ociera się o bezpieczeństwo danych i tego, co wyświetlamy, i komu :)

// lub precyzyjniej - o kwestie zaufania do danych

1. zewnętrzne ID powinny być hashami, dajmy na to sha1($id.$sekret) albo jeszcze lepiej sha1($id.$sekret.$userId)
2. puszczanie tajnego ID w URL-u nie jest dobrym pomysłem

No, ale to chyba nic konkretnie z PHP.

Za bardzo się koncentrujesz na id, ale w sumie o to mi chodziło, bo to zagadka z morałem ;)

(Oczywiście masz rację, ale nie o to tu głównie chodzi, bo jest coś na co mało osób zwraca uwagę. Przypomnę, że chodzi o zaufanie do danych.)

// podpowiedź:


function pokaz_tajne_dane( $id )
{
if ( !is_int( $id ) )
{
throw new Exception('aaaaaaa!');
}

$escaped_server_name = escape_sql( $_SERVER['SERVER_NAME'] );
$sql = "SELECT * FROM dane WHERE id = $id AND server_name = '$escaped_server_name'";

// wyświetlmy dane
var_dump( query_sql( $sql ) );

// zaktualizujmy statystyki
$sql = "UPDATE stats SET gets = gets + 1 WHERE server_name = '$escaped_server_name'";
execute_sql( $sql );
}
Łukasz Karpuć edytował(a) ten post dnia 27.04.10 o godzinie 19:17
Bartłomiej Ogryczak

Bartłomiej Ogryczak Backend Developer @
Layar

Temat: PHP QUIZ

Łukasz Karpuć:
Bartłomiej Ogryczak:
Łukasz Karpuć:
Pytanie głównie ociera się o bezpieczeństwo danych i tego, co wyświetlamy, i komu :)

// lub precyzyjniej - o kwestie zaufania do danych

1. zewnętrzne ID powinny być hashami, dajmy na to sha1($id.$sekret) albo jeszcze lepiej sha1($id.$sekret.$userId)
2. puszczanie tajnego ID w URL-u nie jest dobrym pomysłem

No, ale to chyba nic konkretnie z PHP.

Za bardzo się koncentrujesz na id, ale w sumie o to mi chodziło, bo to zagadka z morałem ;)

(Oczywiście masz rację, ale nie o to tu głównie chodzi, bo jest coś na co mało osób zwraca uwagę. Przypomnę, że chodzi o zaufanie do danych.)

// podpowiedź:


function pokaz_tajne_dane( $id )
{
if ( !is_int( $id ) )
{
throw new Exception('aaaaaaa!');
}

$escaped_server_name = escape_sql( $_SERVER['SERVER_NAME'] );
$sql = "SELECT * FROM dane WHERE id = $id AND server_name = '$escaped_server_name'";

// wyświetlmy dane
var_dump( query_sql( $sql ) );

// zaktualizujmy statystyki
$sql = "UPDATE stats SET gets = gets + 1 WHERE server_name = '$escaped_server_name'";
execute_sql( $sql );
}

Ja bym po pierwsze nie robił tego tak, tylko:


$stmt = $dbh->prepare("SELECT * FROM dane WHERE id = ? AND server_name = ?");
$stmt->execute(array($id,$_SERVER['SERVER_NAME']))
var_dump($stmt->fetch());


Po drugie przypuszczam, że może Ci chodzić o to:

$_SERVER['SERVER_NAME'] = 0;
var_dump($_SERVER['SERVER_NAME'] == 'nasz.serwer.example.pl');
bool(true)


Tylko nie bardzo widzę co to by dało, jeśli w WHERE ponownie masz $_SERVER['SERVER_NAME'], więc miałbyś "SELECT * FROM dane WHERE id = $id AND server_name = '0'", co nie dałoby tego samego rezultatu co "SELECT * FROM dane WHERE id = $id AND server_name = 'nasz.serwer.example.pl'"

Następna dyskusja:

Narzędzia do PHP




Wyślij zaproszenie do