|
| Inputvalidering til gæstebog Fra : Erik Ginnerskov |
Dato : 18-01-07 17:28 |
|
Hej NG
Jeg sidder og bokser med at lave noget inputvalidering til en gæstebog, men
jeg kan ikke få det til at fungere helt som jeg ønsker. Kode (indsat øverst
i dokumentet):
<?php
if (!empty($_POST['message'])) {
header ("Location: ../blokeret.php");
exit;
} else
if (!strpos($_POST['name'], "@") && // tjek, at der ikke er et @ i "navn"
!eregi("\r",$_POST['name']) && // tjek, at der ikke er "vogn-retur" i
"navn"
!eregi("\n",$_POST['name'])) { // tjek, at der ikke er "linjeskift" i
"navn"
header ("Location: ../blokeret.php");
exit;
}
?>
Den første del - tjek, at feltet 'message' er tomt (det skal det være,
ellers er det spam) - fungerer perfekt.
Den anden del - tjek, at der ikke er skrevet forbudt indhold i feltet
'name' - blokerer indlæg, selv om der ikke er skrevet noget forkert.
http://hjemmesideskolen.dk/usenet/gem-php.txt
Jeg har lånt valideringen fra en mail-formular, hvor det ikke giver
problemer:
http://hjemmesideskolen.dk/scripts/phpmail.php
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Martin (18-01-2007)
| Kommentar Fra : Martin |
Dato : 18-01-07 17:34 |
|
Erik Ginnerskov wrote:
> if (!strpos($_POST['name'], "@") && // tjek, at der ikke er et @ i "navn"
> !eregi("\r",$_POST['name']) && // tjek, at der ikke er "vogn-retur" i
> "navn"
> !eregi("\n",$_POST['name'])) { // tjek, at der ikke er "linjeskift" i
> "navn"'
Hvorfor bruge eregi? - Brug da strpos til alle 3, du søger jo bare efter
et "bogstav/ord" i en variabel
if(
strpos($_POST["name"],"@")
||
strpos($_POST["name"],"\n")
||
strpos($_POST["name"],"\r")
)
{
// @ \n \r ER fundet
} else {
// @ \n \r ikke fundet
}
| |
Martin (18-01-2007)
| Kommentar Fra : Martin |
Dato : 18-01-07 17:39 |
|
Martin wrote:
> Erik Ginnerskov wrote:
>> if (!strpos($_POST['name'], "@") && // tjek, at der ikke er et @ i
>> "navn"
>> !eregi("\r",$_POST['name']) && // tjek, at der ikke er "vogn-retur"
>> i "navn"
>> !eregi("\n",$_POST['name'])) { // tjek, at der ikke er "linjeskift" i
>> "navn"'
>
> Hvorfor bruge eregi? - Brug da strpos til alle 3, du søger jo bare efter
> et "bogstav/ord" i en variabel
>
> if(
> strpos($_POST["name"],"@")
> ||
> strpos($_POST["name"],"\n")
> ||
> strpos($_POST["name"],"\r")
> )
> {
> // @ \n \r ER fundet
> } else {
> // @ \n \r ikke fundet
> }
PS: Hvis du virkelig ønsker at starte reg motoren op, så kunne det se
sådan her ud.
PPS: Jeg bruger nu KUN preg da den er nemmere :)
if(preg_match("_\\n|\\r|@_",$str)) {
/*
skåret ud i pap
Den første og sidste _ er for at fortælle preg at det er her det hele
starter
\\n = da \ er en escaper i reg, så skal vi skrive to \ for at fortælle
at det virkelig ER en \ vi vil have.
| = betyder eller.
Så i godt dansk lyder det noget ala
start \n eller \r eller @ slut
_ \\n | \\r | @ _
*/
// @ \n \r ER fundet
} else {
// @ \n \r ikke fundet
}
| |
Erik Ginnerskov (18-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 18-01-07 18:41 |
|
Martin wrote:
> if(preg_match("_\\n|\\r|@_",$str)) {
Så går de lovlige indlæg glat igennem, men er der f.eks. et @ i 'name',
bliver der ikke blokeret:
if (!empty($_POST['message'])) {
header ("Location: ../blokeret.php");
exit;
} else
if (preg_match("_\\n|\\r|@_",$str)) { // tjek, at der ikke er \r, \n eller
@ i "navn"
header ("Location: ../blokeret.php");
exit;
}
Mangler der ikke den definition af, hvilket felt, der ikke må indeholde de
tegn?
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Martin (18-01-2007)
| Kommentar Fra : Martin |
Dato : 18-01-07 19:41 |
|
Erik Ginnerskov wrote:
> if (preg_match("_\\n|\\r|@_",$str)) { // tjek, at der ikke er \r, \n eller
$str skal nok lige laves om til din $_POST["name"], eller hvilket felt
det nu var
| |
Erik Ginnerskov (18-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 18-01-07 18:50 |
|
Martin wrote:
> Hvorfor bruge eregi? - Brug da strpos til alle 3, du søger jo bare
> efter et "bogstav/ord" i en variabel
>
> if(
> strpos($_POST["name"],"@")
> ||
> strpos($_POST["name"],"\n")
> ||
> strpos($_POST["name"],"\r")
> )
> {
> // @ \n \r ER fundet
> }
Det blokerer heller ikke, hvor det skal:
if (!empty($_POST['message'])) {
header ("Location: ../blokeret.php");
exit;
} else
if (strpos($_POST["name"],"@")
||
strpos($_POST["name"],"\n")
||
strpos($_POST["name"],"\r")) { // tjek, at der ikke er \r, \n eller @ i
"navn"
header ("Location: ../blokeret.php");
exit;
}
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Martin (18-01-2007)
| Kommentar Fra : Martin |
Dato : 18-01-07 19:46 |
|
Erik Ginnerskov wrote:
> Martin wrote:
>
>> Hvorfor bruge eregi? - Brug da strpos til alle 3, du søger jo bare
>> efter et "bogstav/ord" i en variabel
>>
>> if(
>> strpos($_POST["name"],"@")
>> ||
>> strpos($_POST["name"],"\n")
>> ||
>> strpos($_POST["name"],"\r")
>> )
>> {
>> // @ \n \r ER fundet
>> }
>
> Det blokerer heller ikke, hvor det skal:
Hovsa... glemte lige at strpos ikke returnerer false eller true - så vi
bruger lige en anden.
if(
strpos($_POST["name"],"@")===FALSE
&&
strpos($_POST["name"],"\r")===FALSE
&&
strpos($_POST["name"],"\n")===FALSE
)
{
echo $test1." er tomt for lala";
} else {
echo "BUUUUUH!! (".$test1.")";
}
Bemærk de 3 === det er vigtigt det er 3!
| |
Bertel Lund Hansen (18-01-2007)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 18-01-07 19:56 |
|
Martin skrev:
> Hovsa... glemte lige at strpos ikke returnerer false eller true - så vi
> bruger lige en anden.
Ja, men du behandler stadig de tre tegn ens, og det er forkert. @
skal med, de to andre er i Føtex ... øh jeg mener, de må ikke
være der.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Bertel Lund Hansen (18-01-2007)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 18-01-07 19:47 |
|
Erik Ginnerskov skrev:
> Det blokerer heller ikke, hvor det skal:
> if (!empty($_POST['message'])) {
> header ("Location: ../blokeret.php");
> exit;
> } else
> if (strpos($_POST["name"],"@")
> ||
> strpos($_POST["name"],"\n")
> ||
> strpos($_POST["name"],"\r")) { // tjek, at der ikke er \r, \n eller @ i
> "navn"
> header ("Location: ../blokeret.php");
> exit;
> }
Nej, for det skal være NOT sammen med @. Den må jo ikke blokere
hvis man har husket det.
Men du bruger en farlig test når du skriver sådan:
if (strpos($_POST["name"],"@"))
Den returnerer nemlig et tal der læses som false hvis brugeren
starter med @ (positionen er 0).
Den sikre test kræver tre tegn:
if (strpos($_POST["name"],"@")===false)
Den returnerer *kun* true hvis brugeren helt undlader at få @
med.
Jeg bruger ellers ofte de farlige tests hvis jeg ved at det ikke
giver problemer, men netop ved strpos() bruger jeg altid tre tegn
fordi den ellers er smadderdrilagtig.
Alternativt kan man indskyde et kunstigt tegn når der testes, men
det er lidt klamp:
if (strpos('X'.$_POST["name"],"@"))
Den kan ikke returnere 0 for @'s position og kan derfor ikke
returnere et forkert false.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Erik Ginnerskov (18-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 18-01-07 22:26 |
|
Erik Ginnerskov wrote:
> Det blokerer heller ikke, hvor det skal:
Øv, det er dummeslag til mig. Det plejer at hjælpe, når det feltnavn, man
tester på, er det samme som navnet på det felt, der faktisk skal testes:
if (strpos($_POST["navn"],"@")
||
strpos($_POST["navn"],"\n")
||
strpos($_POST["navn"],"\r")) { // tjek, at der ikke er \r, \n eller @ i
"navn"
header ("Location: ../blokeret.php");
exit;
}
.... blokerer, hvis der i feltet 'navn' er et '@', men er ligeglad med, om
der er et '\r' eller '\n'.
if (!strpos($_POST['navn'], "@") && // tjek, at der ikke er et @ i "navn"
!eregi("\r",$_POST['navn']) && // tjek, ikke at der er "vogn-retur" i
"navn"
!eregi("\n",$_POST['navn'])) { // tjek, at der ikke er "linjeskift" i
header ("Location: ../blokeret.php");
exit;
}
.... blokerer både for '@' og '\n', så mon ikke også for '\r'?
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Erik Ginnerskov (20-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 20-01-07 22:24 |
|
Erik Ginnerskov wrote:
> if (!empty($_POST['message'])) {
> header ("Location: ../blokeret.php");
> exit;
> } else
> if (!strpos($_POST['navn'], "@") && // tjek, ikke et @ i "navn"
> !eregi("\r",$_POST['navn']) && // tjek, ikke "vogn-retur" i "navn"
> !eregi("\n",$_POST['navn'])) { // tjek, ikke "linjeskift" i "navn"
> header ("Location: ../blokeret.php");
> exit;
> }
>
> ... blokerer både for '@' og '\n', så mon ikke også for '\r'?
Øv igen, der var jeg for hurtig. Den konstruktion blokerer for alt, også
det, der ikke skal blokeres.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Bertel Lund Hansen (20-01-2007)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 20-01-07 22:51 |
|
Erik Ginnerskov skrev:
> Øv igen, der var jeg for hurtig. Den konstruktion blokerer for alt, også
> det, der ikke skal blokeres.
if (!empty($_POST['message'])) {
header ("Location: ../blokeret.php");
exit;
}
else
if (strpos($_POST['navn'], "@")===false
|| (strpos($_POST['navn'], "\n")===true
|| (strpos($_POST['navn'], "\r")===true) {
header ("Location: ../blokeret.php");
exit;
}
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Erik Ginnerskov (20-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 20-01-07 22:57 |
|
Bertel Lund Hansen wrote:
> if (!empty($_POST['message'])) {
> header ("Location: ../blokeret.php");
> exit;
> }
> else
> if (strpos($_POST['navn'], "@")===false
>>> (strpos($_POST['navn'], "\n")===true
>>> (strpos($_POST['navn'], "\r")===true) {
> header ("Location: ../blokeret.php");
> exit;
> }
Ikke forstået. Alle tre strenge i feltet 'navn' skal blokeres. Enten skal
alle tre være false eller alle skal være true - så vidt jeg forstår. Du
mangler da også at lukke nogle parenteser.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Bertel Lund Hansen (20-01-2007)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 20-01-07 23:10 |
|
Erik Ginnerskov skrev:
> Ikke forstået. Alle tre strenge i feltet 'navn' skal blokeres.
Åh ja, jeg tænkte på en mailadresse. Det skal være det her i
stedet:
if (strpos($_POST['navn'], "@")===true
|| (strpos($_POST['navn'], "\n")===true
|| (strpos($_POST['navn'], "\r")===true) {
header ("Location: ../blokeret.php");
exit;
}
>Du mangler da også at lukke nogle parenteser.
Nej. Opstillingen er
if (A || B || C) ...
så der er kun én if der skal lukkes.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Erik Ginnerskov (20-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 20-01-07 23:12 |
|
Bertel Lund Hansen wrote:
>> Du mangler da også at lukke nogle parenteser.
>
> Nej. Opstillingen er
>
> if (A || B || C) ...
>
> så der er kun én if der skal lukkes.
I alle tre linjer har du to venstreparenteser, men kun i nederste linje har
du to højreparenteser. Jeg kan ikke få regnestykket til at gå op.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Bertel Lund Hansen (21-01-2007)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 21-01-07 00:12 |
|
Erik Ginnerskov skrev:
> I alle tre linjer har du to venstreparenteser, men kun i nederste linje har
> du to højreparenteser. Jeg kan ikke få regnestykket til at gå op.
Alle gode gange 27:
if (strpos($_POST['navn'], "@")===true
|| strpos($_POST['navn'], "\n")===true
|| strpos($_POST['navn'], "\r")===true) {
header ("Location: ../blokeret.php");
exit;
}
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Erik Ginnerskov (21-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-01-07 00:24 |
|
Bertel Lund Hansen wrote:
> Alle gode gange 27:
>
> if (strpos($_POST['navn'], "@")===true
> || strpos($_POST['navn'], "\n")===true
> || strpos($_POST['navn'], "\r")===true) {
> header ("Location: ../blokeret.php");
> exit;
> }
Desværre, den stopper ikke noget heller. Men parentesregnskabet stemmer da.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Arne Feldborg (21-01-2007)
| Kommentar Fra : Arne Feldborg |
Dato : 21-01-07 00:48 |
|
Bertel Lund Hansen <unospamo@lundhansen.dk> skrev Sun, 21 Jan 2007
00:12:00 +0100
>Alle gode gange 27:
>
> if (strpos($_POST['navn'], "@")===true
> || strpos($_POST['navn'], "\n")===true
> || strpos($_POST['navn'], "\r")===true) {
> header ("Location: ../blokeret.php");
> exit;
> }
>
Hvis udsagnet er TRUE bliver der returneret en talværdi. Derfor vil din
konstruktion aldrig stoppe noget som helst.
Prøv at nøjes med 2 lighedtegn.
--
mvh, A:\Feldborg
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/
| |
Erik Ginnerskov (21-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-01-07 00:57 |
|
Arne Feldborg wrote:
> Prøv at nøjes med 2 lighedtegn.
Så blev den da i stand til at blokere for forekomsten af '@', mens indlæg
med acceptabelt indhold i 'navn' får lov til at passere.
Så skal jeg bare regne ud, hvordan jeg får testet for \n og \r - det nytter
ikke noget at skrive det direkte, det slipper igennem.
Hvis jeg indsætterdette:
Erik
Ginnerskov
.... altså et linjeskift skrevet et andet sted og kopieret over i 'navn', får
det lov til at passere, men kun første linje bliver registreret.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Arne Feldborg (21-01-2007)
| Kommentar Fra : Arne Feldborg |
Dato : 21-01-07 15:26 |
|
"Erik Ginnerskov" <erik@donotspammeplease.invalid> skrev Sun, 21 Jan
2007 00:57:16 +0100
>> Prøv at nøjes med 2 lighedtegn.
>
>Så blev den da i stand til at blokere for forekomsten af '@', mens indlæg
>med acceptabelt indhold i 'navn' får lov til at passere.
>
Jo, men det er kun en halv løsning. Hvis den søgte karakter står i
første position vil det alligevel gå galt.
>Så skal jeg bare regne ud, hvordan jeg får testet for \n og \r - det nytter
>ikke noget at skrive det direkte, det slipper igennem.
>
For mig at se er det hele konstruktionen der er forkert.
Man bør slet ikke checke på TRUE i den situation, men derimod på FALSE.
Se også manualens beskrivelse af problemstillingen.
--
mvh, A:\Feldborg
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/
| |
Arne Feldborg (21-01-2007)
| Kommentar Fra : Arne Feldborg |
Dato : 21-01-07 15:51 |
|
"Erik Ginnerskov" <erik@donotspammeplease.invalid> skrev Sun, 21 Jan
2007 00:57:16 +0100
>Så skal jeg bare regne ud, hvordan jeg får testet for \n og \r - det nytter
>ikke noget at skrive det direkte, det slipper igennem.
>
Prøv at skifte alle tre forekomster af === TRUE ud med !== FALSE det
burde kunne gøre tricket.
Altså noget i den her stil:
if (strpos($_POST['navn'], "@") !== false
or strpos($_POST['navn'], "\n") !== false
or strpos($_POST['navn'], "\r") !== false)
{
echo 'Fy, fy skamme';
}else{
echo 'Det er ok';
}
Eller måske lidt mere læsevenligt:
if (strpos($_POST['navn'], "@") === false
and strpos($_POST['navn'], "\n") === false
and strpos($_POST['navn'], "\r") === false)
{
echo 'Det er ok';
}else{
echo 'Fy, fy skamme';
}
Men pas på ikke at blande de to eksempler sammen.!!
--
mvh, A:\Feldborg
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/
| |
Erik Ginnerskov (21-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-01-07 17:47 |
|
Arne Feldborg wrote:
> if (strpos($_POST['navn'], "@") !== false
> or strpos($_POST['navn'], "\n") !== false
> or strpos($_POST['navn'], "\r") !== false)
> {
> echo 'Fy, fy skamme';
> }else{
> echo 'Det er ok';
> }
Stopper indlæg ved forekomst af '@', men lader forekomst af linjeskift
(indkopieret [Enter]) passere. Lovlige indlæg passerer.
> if (strpos($_POST['navn'], "@") === false
> and strpos($_POST['navn'], "\n") === false
> and strpos($_POST['navn'], "\r") === false)
> {
> echo 'Det er ok';
> }else{
> echo 'Fy, fy skamme';
> }
Ikke testet, da det vil blive et nummer for besværlig at møblere om på
konsekvenserne. Det vil kræve, at jeg midlertidigt laver et andet script,
der ikke sigter på at indskrive noget i MySql. Jeg vender tilbage.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Erik Ginnerskov (21-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-01-07 17:57 |
|
Erik Ginnerskov wrote:
>> if (strpos($_POST['navn'], "@") === false
>> and strpos($_POST['navn'], "\n") === false
>> and strpos($_POST['navn'], "\r") === false)
>> {
>> echo 'Det er ok';
>> }else{
>> echo 'Fy, fy skamme';
>> }
<?php
if (!empty($_POST['message'])) {
header ("Location: fejl.php");
exit;
} else
if (strpos($_POST['navn'], "@") === false
|| strpos($_POST['navn'], "\n") === false
|| strpos($_POST['navn'], "\r") === false) {
echo '<p>indtastningen var lovlig</p>';
} else {
header ("Location: fejl.php");
exit;
}
?>
Alt passerer uhindret. ;-(
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Arne Feldborg (21-01-2007)
| Kommentar Fra : Arne Feldborg |
Dato : 21-01-07 18:55 |
|
"Erik Ginnerskov" <erik@donotspammeplease.invalid> skrev Sun, 21 Jan
2007 17:57:17 +0100
> <?php
> if (!empty($_POST['message'])) {
> header ("Location: fejl.php");
> exit;
> } else
> if (strpos($_POST['navn'], "@") === false
> || strpos($_POST['navn'], "\n") === false
> || strpos($_POST['navn'], "\r") === false) {
> echo '<p>indtastningen var lovlig</p>';
> } else {
> header ("Location: fejl.php");
> exit;
> }
> ?>
>
>Alt passerer uhindret. ;-(
>
Klart nok. Nu har du gjort lige præcist det jeg advarede imod, nemlig
blandet de to forslag sammen.
Bemærk, at det ene forslag bruger === og AND og det andet forslag bruger
!== og OR.
--
mvh, A:\Feldborg
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/
| |
Erik Ginnerskov (21-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-01-07 19:28 |
|
Arne Feldborg wrote:
> Klart nok. Nu har du gjort lige præcist det jeg advarede imod, nemlig
> blandet de to forslag sammen.
>
> Bemærk, at det ene forslag bruger === og AND og det andet forslag
> bruger !== og OR.
Ups, den overså jeg. Jeg prøver igen.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Erik Ginnerskov (21-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-01-07 19:38 |
|
Erik Ginnerskov wrote:
> Jeg prøver igen.
<?php
if (!empty($_POST['message'])) {
header ("Location: fejl.php");
exit;
} else
if (strpos($_POST['navn'], "@") === false
and strpos($_POST['navn'], "\n") === false
and strpos($_POST['navn'], "\r") === false) {
echo '<p>indtastningen var lovlig</p>';
} else {
header ("Location: fejl.php");
exit;
}
?>
'@' bliver stoppet, men indkopieret linjeskift passerer uhindret. Der
mangler måske noget, som kan 'oversætte' det indkopierede linjeskift til
koder, der kan detekteres?
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Arne Feldborg (21-01-2007)
| Kommentar Fra : Arne Feldborg |
Dato : 21-01-07 18:55 |
|
"Erik Ginnerskov" <erik@donotspammeplease.invalid> skrev Sun, 21 Jan
2007 17:46:31 +0100
>Arne Feldborg wrote:
>
>> if (strpos($_POST['navn'], "@") !== false
>> or strpos($_POST['navn'], "\n") !== false
>> or strpos($_POST['navn'], "\r") !== false)
>> {
>> echo 'Fy, fy skamme';
>> }else{
>> echo 'Det er ok';
>> }
>
>Stopper indlæg ved forekomst af '@', men lader forekomst af linjeskift
>(indkopieret [Enter]) passere. Lovlige indlæg passerer.
>
Så må du lige forklare nærmere hvordan det linieskift rent faktisk ser
ud. Er det feks. allerede på det tidspunkt kørt gennem en nl2br() eller
lign.
Prøv først rutinen for sig selv, før du kilpper det sammen med det du
har i forvejen. Udkommeneter de fire linier herunder een efter een og se
resutatet.
<?php
//$_POST['navn'] = "erik@donotspammeplease.invalid";
//$_POST['navn'] = "Erik \n Ginnerskov";
//$_POST['navn'] = "Erik \r Ginnerskov";
//$_POST['navn'] = "Arne Feldborg";
echo $_POST['navn'];
if (strpos($_POST['navn'], "@") !== false
or strpos($_POST['navn'], "\n") !== false
or strpos($_POST['navn'], "\r") !== false)
{
echo '<br>Fy, fy skamme';
}else{
echo '<br>Det er ok';
}
exit;
?>
--
mvh, A:\Feldborg
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/
| |
Erik Ginnerskov (21-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-01-07 19:44 |
|
Arne Feldborg wrote:
>> Stopper indlæg ved forekomst af '@', men lader forekomst af
>> linjeskift (indkopieret [Enter]) passere.
> Så må du lige forklare nærmere hvordan det linieskift rent faktisk ser
> ud. Er det feks. allerede på det tidspunkt kørt gennem en nl2br()
> eller lign.
Jeg skriver i en teksteditor:
Erik
Ginnerskov
.... kopierer det hele og indsætter det i feltet 'navn'
> Prøv først rutinen for sig selv, før du kilpper det sammen med det du
> har i forvejen. Udkommeneter de fire linier herunder een efter een og
> se resutatet.
>
> [klip kode]
Det prøver jeg senere i aften. Nu har jeg andet at se til den næste times
tid.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Arne Feldborg (22-01-2007)
| Kommentar Fra : Arne Feldborg |
Dato : 22-01-07 08:02 |
|
"Erik Ginnerskov" <erik@donotspammeplease.invalid> skrev Sun, 21 Jan
2007 19:43:43 +0100
>> Så må du lige forklare nærmere hvordan det linieskift rent faktisk ser
>> ud. Er det feks. allerede på det tidspunkt kørt gennem en nl2br()
>> eller lign.
>
>Jeg skriver i en teksteditor:
>
> Erik
> Ginnerskov
>
>... kopierer det hele og indsætter det i feltet 'navn'
>
Jammen, hov stop nu lige lidt.!!
Det kan man jo ikke gøre i et textfelt, og en bot kan da slet ikke. Og
hvis det overhovedet var muligt ville det iøvrigt blive kodet under
overførslen.
Det du har brug for er, at kunne frasortere forekomster af "\n" og eller
"\r" som er *indsat* direkte i en konstrueret $post[name].
Det kan du med begge de to forslag jeg har sendt dig. Men du kan, efter
min bedste overbevisning, ikke checke det på den måde du gør.
--
mvh, A:\Feldborg
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/
| |
Erik Ginnerskov (23-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 23-01-07 00:37 |
|
Arne Feldborg wrote:
> Det du har brug for er, at kunne frasortere forekomster af "\n" og
> eller "\r" som er *indsat* direkte i en konstrueret $post[name].
>
> Det kan du med begge de to forslag jeg har sendt dig. Men du kan,
> efter min bedste overbevisning, ikke checke det på den måde du gør.
Jeg er helt blank. Nogen forslag til, hvordan jeg kan teste, om det bliver
fanget i reallife?
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Arne Feldborg (23-01-2007)
| Kommentar Fra : Arne Feldborg |
Dato : 23-01-07 17:30 |
|
"Erik Ginnerskov" <erik@donotspammeplease.invalid> skrev Tue, 23 Jan
2007 00:37:23 +0100
>Jeg er helt blank. Nogen forslag til, hvordan jeg kan teste, om det bliver
>fanget i reallife?
>
Det gør du sådan set bare samme måde som du testede de eksempler jeg
sendte dig.
Hvis du i toppen af dit script har noget al'la dette:
<?php
if (!empty($_POST['message'])) {
header ("Location: fejl.php");
exit;
} else
if (strpos($_POST['navn'], "@") osv. osv.....
Så laver du det bare om til:
<?php
//$_POST['navn'] = "erik@donotspammeplease.invalid";
//$_POST['navn'] = "Erik \n Ginnerskov";
//$_POST['navn'] = "Erik \r Ginnerskov";
//$_POST['navn'] = "Arne Feldborg";
//$_POST['message'] "";
//$_POST['message'] "Dette er en tekst";
if (!empty($_POST['message'])) {
header ("Location: fejl.php");
exit;
} else
if (strpos($_POST['navn'], "@") osv. osv.....
Så udkommneterer du bare linierne enkeltvis. Og når du så affyrerer et
indlæg fra din formular vil den pågældende linie - uanset hvad du har
skrevet i formularen - blive udskiftet med den linie du vil afprøve.
Jeg går ud fra, at det er med fuldt overlæg (spamsikring) du lader
scriptet gå i fejl hvis $_POST['message'] er udfyldt.?
--
mvh, A:\Feldborg
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/
| |
Erik Ginnerskov (23-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 23-01-07 23:23 |
|
Arne Feldborg wrote:
> <?php
> //$_POST['navn'] = "erik@donotspammeplease.invalid";
> //$_POST['navn'] = "Erik \n Ginnerskov";
> //$_POST['navn'] = "Erik \r Ginnerskov";
> //$_POST['navn'] = "Arne Feldborg";
> //$_POST['message'] "";
> //$_POST['message'] "Dette er en tekst";
Den tur har jeg været igennem en gang og konstaterede, at der blev blokeret
for både 1., 2. og 3. linje. Se mit indlæg 21.1. 22:02.
4. og 5. linje vil passere og 6. vil blive blokeret - som jeg ønsker det.
> Jeg går ud fra, at det er med fuldt overlæg (spamsikring) du lader
> scriptet gå i fejl hvis $_POST['message'] er udfyldt.?
Just präcis. Feltet "message" er et textarea, som med css er gjort usynligt
for almindelige brugere. Da spambotter ikke læser css, finder de et felt med
navnet message og fylder et eller andet i - Slam! siger fælden så.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Erik Ginnerskov (21-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-01-07 22:03 |
|
Arne Feldborg wrote:
$_POST['navn'] = "erik@donotspammeplease.invalid";
//$_POST['navn'] = "Erik \n Ginnerskov";
//$_POST['navn'] = "Erik \r Ginnerskov";
//$_POST['navn'] = "Arne Feldborg";
Indlægget bliver stoppet
____
//$_POST['navn'] = "erik@donotspammeplease.invalid";
$_POST['navn'] = "Erik \n Ginnerskov";
//$_POST['navn'] = "Erik \r Ginnerskov";
//$_POST['navn'] = "Arne Feldborg";
Indlægget bliver stoppet
____
//$_POST['navn'] = "erik@donotspammeplease.invalid";
//$_POST['navn'] = "Erik \n Ginnerskov";
$_POST['navn'] = "Erik \r Ginnerskov";
//$_POST['navn'] = "Arne Feldborg";
Indlægget bliver stoppet
____
//$_POST['navn'] = "erik@donotspammeplease.invalid";
//$_POST['navn'] = "Erik \n Ginnerskov";
//$_POST['navn'] = "Erik \r Ginnerskov";
$_POST['navn'] = "Arne Feldborg";
Indlægget får lov til at passere, her er der heller ikke fejl i feltets
indhold.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Arne Feldborg (20-01-2007)
| Kommentar Fra : Arne Feldborg |
Dato : 20-01-07 23:23 |
|
Bertel Lund Hansen <unospamo@lundhansen.dk> skrev Sat, 20 Jan 2007
23:10:01 +0100
>Nej. Opstillingen er
>
> if (A || B || C) ...
>
Men du skriver: if (A || ( B || ( C)
--
mvh, A:\Feldborg
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/
| |
Erik Ginnerskov (20-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 20-01-07 23:34 |
|
Arne Feldborg wrote:
>> Nej. Opstillingen er
>>
>> if (A || B || C) ...
>>
> Men du skriver: if (A || ( B || ( C)
Nu forstår jeg da slet ingenting. Din kode:
if (strpos($_POST['navn'], "@")===true 2 venstre og 1 højre
|| (strpos($_POST['navn'], "\n")===true 2 venstre og 1 højre
|| (strpos($_POST['navn'], "\r")===true) { 2 venstre og 2 højre
Hvis 'if(a || b || c)' skal passe med ovenstående, så mangler der vel i
stedet en venstreparentes i første linje - eller?
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
Erik Ginnerskov (20-01-2007)
| Kommentar Fra : Erik Ginnerskov |
Dato : 20-01-07 23:41 |
|
Erik Ginnerskov wrote:
> Hvis 'if(a || b || c)' skal passe med ovenstående, så mangler der vel
> i stedet en venstreparentes i første linje - eller?
Jeg prøvede denne ændring:
if ((strpos($_POST['navn'], "@"))===true
|| (strpos($_POST['navn'], "\n"))===true
|| (strpos($_POST['navn'], "\r"))===true) {
header ("Location: ../blokeret.php");
exit;
}
.... men så stopper den slet ikke noget. Alt slipper igennem til gæstebogen.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk
| |
|
|