/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
strstr(), strpos() m.m.
Fra : Anders K. Madsen


Dato : 19-06-03 16:04

Hejsan folkens.
Jeg sidder og fedter med at lave et script der gennemroder
en Apache error_log for tegn på orme-angreb, men...
Hvis jeg bruger strstr() til at søge efter f.x. strengen:
/iisadmpwd/..%2f..%2f..%2f..%2f..%2f..%2fwinnt/system32/cmd.exe
Så returnerer den false, men laver jeg en 'grep' med den samme
streng (copy/pasted) på error_log'en i min terminal, så finder
den strengen, ganske som man kunne forvente strstr() ville gøre
det...

Jeg prøvede for sjov også lige at bruge strpos(), men med samme
resultat...

Det kan jo ikke have noget med case-sensitivity at gøre, da 'grep'
jo er case-sensitive med mindre man giver den '-i'.

Er der nogen der har oplevet noget lignende det før?
Eller bare nogen med et godt forslag...

Det er lidt heavy at bruge ereg(), da den jo starter hele regex-
maskineriet op...

Mvh.
   Madsen

--
- - - - - - - - - - - - - - + - - - - - - - - - - - - - - +
| Anders K. Madsen
http://lillesvin.linux.dk |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| There are 10 types of people in the world... |
Those who understand binary - and those who don't.
| - http://bash.org |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - +


 
 
Peter Brodersen (19-06-2003)
Kommentar
Fra : Peter Brodersen


Dato : 19-06-03 16:07

On Thu, 19 Jun 2003 17:03:40 +0200, "Anders K. Madsen"
<madsen@sjovedyr.dk> wrote:

>Hvis jeg bruger strstr() til at søge efter f.x. strengen:
>/iisadmpwd/..%2f..%2f..%2f..%2f..%2f..%2fwinnt/system32/cmd.exe
>Så returnerer den false, men laver jeg en 'grep' med den samme
>streng (copy/pasted) på error_log'en i min terminal, så finder
>den strengen, ganske som man kunne forvente strstr() ville gøre
>det...

Hvis du copypaste'r, så husk at "." har en bestemt betydning for grep.

Hvordan ser din PHP-kode ud?

--
- Peter Brodersen

Anders K. Madsen (19-06-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 19-06-03 16:22

On Thu, 19 Jun 2003 17:06:52 +0200, Peter Brodersen wrote:
[snip quote]
> Hvis du copypaste'r, så husk at "." har en bestemt betydning for grep.
Ja, men ikke når man putter " rundt om <pattern>...

> Hvordan ser din PHP-kode ud?

Meget godt... Især i VIM... :)

Nej, den er meget, meget lang, men i hovedtræk ser den sådan her
ud:

function search($needle, $haystack)
{
if (is_string($needle)) {
if (false !== strpos($haystack, $needle)) {
return true;
} else {
return false;
}

} else if (is_array($needle)) {
foreach ($needle as $new_needle) {

// For debugging:
echo " *** Searching for: $new_needle --- ";

if (false !== strpos($haystack, $new_needle)) {
break;
return true;
}
}
}
return false;
}

Og den funktion fodrer jeg så i et loop, hvor den først får en
streng (som identificerer CodeRed) og dernæst et array, bestående af
strenge, der identificerer Nimda...

Men den finder kun CodeRed...
Men debug-echo'en viser mig at den søger på det rigtige og grep finder det
da også når jeg går ind og søger manuelt....

Det er meget mystisk...

Som jeg lige skrev i en anden post, så finder den heller ikke
'/scripts/root.exe'....

Mvh.
   Madsen

--
- - - - - - - - - - - - - - + - - - - - - - - - - - - - - +
| Anders K. Madsen
http://lillesvin.linux.dk |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| There are 10 types of people in the world... |
Those who understand binary - and those who don't.
| - http://bash.org |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - +


Peter Brodersen (19-06-2003)
Kommentar
Fra : Peter Brodersen


Dato : 19-06-03 16:33

On Thu, 19 Jun 2003 17:21:58 +0200, "Anders K. Madsen"
<madsen@sjovedyr.dk> wrote:

>> Hvis du copypaste'r, så husk at "." har en bestemt betydning for grep.
>Ja, men ikke når man putter " rundt om <pattern>...

Eh, jo?

$ echo foo | grep "f.o"
foo

--
- Peter Brodersen

Anders K. Madsen (19-06-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 19-06-03 16:42

On Thu, 19 Jun 2003 17:32:40 +0200, Peter Brodersen wrote:

> On Thu, 19 Jun 2003 17:21:58 +0200, "Anders K. Madsen"
> <madsen@sjovedyr.dk> wrote:
>
>>> Hvis du copypaste'r, så husk at "." har en bestemt betydning for grep.
>>Ja, men ikke når man putter " rundt om <pattern>...
>
> Eh, jo?
>
> $ echo foo | grep "f.o"
> foo

Aha... Ok, det er bare mig der er dårlig til at læse manualer...

Anyways, så fejler den stadig og jeg har altså taget mange af strengene
den skal matche fra den error_log som den selv søger i...

Er der nogle tegn der skal escapes i strpos(), som ingen har fortalt mig
om?

Mvh.
   Madsen

--
- - - - - - - - - - - - - - + - - - - - - - - - - - - - - +
| Anders K. Madsen
http://lillesvin.linux.dk |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Anders K. Madsen (19-06-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 19-06-03 16:12

Hmm, den fejler også på en så simpel streng som: '/scripts/root.exe'

Mvh.
   Madsen

--
- - - - - - - - - - - - - - + - - - - - - - - - - - - - - +
| Anders K. Madsen
http://lillesvin.linux.dk |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| There are 10 types of people in the world... |
Those who understand binary - and those who don't.
| - http://bash.org |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - +


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408936
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste