Avatar billede websam Nybegynder
24. maj 2005 - 10:17 Der er 39 kommentarer og
1 løsning

Wysiwyg sikkerhed ?

Hejsa,

Jeg benytter mig af brugen af et wysiwyg modul til erstatning for nogle af min textarea's, men for at jeg kan få lov at gemme data i databasen skal jeg tilføje ValidateRequest="false" til min aspx side og det skaber jo som sagt et sikkerhed problem da folk så kan tilføje diverse iriterende og skadelig kode.

Hvordan ville du forholde dig til dette ? Og er der nogle muligheder for kun at tillade <b>, <i>, <font> og andre html tags skrevet i wysiwyg feltet ?

/Websam
Avatar billede arne_v Ekspert
24. maj 2005 - 11:15 #1
noget special kode til at validere inden der gemmes i database som
kun tillader visse HTML tags måske ??
Avatar billede websam Nybegynder
24. maj 2005 - 13:32 #2
Ok det vil sige at der ikke er noget smart i platformen man kunne bruge for at løse det for så har jeg noget ældre asp kode som jeg kan omskrive til dette formål :o)

/Websam
Avatar billede arne_v Ekspert
24. maj 2005 - 13:46 #3
regex supporten er det ihvertfald
Avatar billede arne_v Ekspert
24. maj 2005 - 13:47 #4
foruden at frameworket for validerings kode også er der (jeg har bare aldrig selv
prøvet det)
Avatar billede websam Nybegynder
24. maj 2005 - 13:48 #5
Ja det ved jeg men det er ikke lige min stærke side kunne du komme med et eksempel på hvordan jeg kunne lave det med regex ?

/Websam
Avatar billede arne_v Ekspert
24. maj 2005 - 13:58 #6
jeg kan ihvertfald første kigge på det i aften - er på arbejde nu
Avatar billede websam Nybegynder
24. maj 2005 - 14:00 #7
Det ville være rart hvis du gidder hjælpe mig i den rigtige retning :o) Så jeg venter gerne.

/Websam
Avatar billede arne_v Ekspert
24. maj 2005 - 21:18 #8
lidt inspiration:

Imports System
Imports System.Collections
Imports System.Text.RegularExpressions

Class MainClass
    Private Shared valid As ArrayList = New ArrayList(New String() {"b", "i"})
    Public Shared Sub Test(ByVal s As String)
        Dim res1 As MatchCollection = Regex.Matches(s, "(?:<)([^/>][^>]*)(?:>)")
        Dim i As Integer
        For i = 0 To res1.Count - 1
            If Not valid.Contains(res1(i).Groups(1).Value) Then
                Console.WriteLine(s + " - contains invalid start tag")
            End If
        Next
        Dim res2 As MatchCollection = Regex.Matches(s, "(?:</)([^>]+)(?:>)")
        For i = 0 To res1.Count - 1
            If Not valid.Contains(res2(i).Groups(1).Value) Then
                Console.WriteLine(s + " - contains invalid end tag")
            End If
        Next
    End Sub

    Public Shared Sub Main(ByVal args As String())
        Test("Dette her er <b>OK</b> text")
        Test("Dette her <a href='http://www.eksperten.dk/'>link</a> er ikke OK")
    End Sub
End Class
Avatar billede websam Nybegynder
24. maj 2005 - 21:26 #9
Skal jeg så forstå det sådan at jeg skal køre :

Dim res1 As MatchCollection = Regex.Matches(s, "(?:<)([^/>][^>]*)(?:>)")
    Dim i As Integer
    For i = 0 To res1.Count - 1
        If Not valid.Contains(res1(i).Groups(1).Value) Then
            Console.WriteLine(s + " - contains invalid start tag")
        End If
    Next

For hver af de elementer jeg tilføjer i dette array :

Private Shared valid As ArrayList = New ArrayList(New String() {"b", "i"})

Men blot med udskiftning af res1, res2, res3 osv. i dette :

Dim res1 As MatchCollection = Regex.Matches(s, "(?:<)([^/>][^>]*)(?:>)")
For i = 0 To res1.Count - 1

???

/Websam
Avatar billede arne_v Ekspert
24. maj 2005 - 21:29 #10
nej

jeg har en for løkke til start tag og en løkke til slut tag - der skal aldrig tilføjes
flere løkker

du skal tilføje ok tags til listen

du skal erstatte Console.WriteLine med et eller andet web'sk
Avatar billede websam Nybegynder
24. maj 2005 - 21:33 #11
ok cool nok jeg tester det lige af :o)

og hvis du gidder kunne jeg godt tænke mig en forklaring til selve valideringen :

Regex.Matches(s, "(?:<)([^/>][^>]*)(?:>)")
Regex.Matches(s, "(?:</)([^>]+)(?:>)")

/Websam
Avatar billede arne_v Ekspert
24. maj 2005 - 21:37 #12
"(?:<)([^/>][^>]*)(?:>)" = en < + et tegn som ikke er / + nul eller flere tegn som ikke er > + en >

"(?:</)([^>]+)(?:>)" = en < + en / + et eller flere tehn som ikke er > + en >
Avatar billede arne_v Ekspert
24. maj 2005 - 21:37 #13
og et svar
Avatar billede websam Nybegynder
24. maj 2005 - 22:24 #14
Så fik jeg testst lidt og uanset om det er valid eller ej så smidder den fejlbesked. Min function ser ud som følger :

Private Shared valid As ArrayList = New ArrayList(New String() {"STRONG", "B"})
    Public Shared Function CheckTextarea(ByVal Input As String)
        Dim strError As String
        Dim res1 As MatchCollection = Regex.Matches(Input, "(?:<)([^/>][^>]*)(?:>)")
        Dim i As Integer
        For i = 0 To res1.Count - 1
            If Not valid.Contains(res1(i).Groups(1).Value) Then
                strError = "Det gik ikke godt :o( !"
            End If
        Next
        Dim res2 As MatchCollection = Regex.Matches(Input, "(?:</)([^>]+)(?:>)")
        For i = 0 To res1.Count - 1
            If Not valid.Contains(res2(i).Groups(1).Value) Then
                strError = "Det gik ikke godt :o( !"
            End If
        Next
        Return strError
    End Function

og min button event ser ud som følger :

Private Sub btn_Newsadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Newsadd.Click
        '--- Kalder tilføje funktion
        Dim strNewsAdd As String
        strNewsAdd = Util.CheckTextarea(txt_News.Text)
        If strNewsAdd <> "" Then
            lbl_NewsError.Text = "<b>" & GetLocalizedString("errorheader") & "</b><br>" & strNewsAdd & "<br>"
        End If
    End Sub

Gør jeg noget forkert her ?

/Websam
Avatar billede arne_v Ekspert
24. maj 2005 - 22:29 #15
jeg ville ihverfald ligge en

strError = ""

ind øverst i CheckTextarea
Avatar billede websam Nybegynder
24. maj 2005 - 22:32 #16
Det prøver jeg lige. En anden ting, skal denne linie være den samme i begge :

For i = 0 To res1.Count - 1

???

/Websam
Avatar billede arne_v Ekspert
24. maj 2005 - 22:34 #17
nej - det er en copy paste bøf

den sidste skal naturligvis være res2
Avatar billede websam Nybegynder
24. maj 2005 - 22:42 #18
Ok jeg har lige testet lidt mere og hvis jeg manuelt indsætter en streng som her :

strNewsAdd = Util.CheckTextarea("<i>tester</i>")

så skriver den fejl ud. hvis jeg så laver en anden test :

strNewsAdd = Util.CheckTextarea("<b>tester</b>")

så melder den ikke nogen fejl, men hvis jeg tager det indhold som kommer fra feltet med denne :

strNewsAdd = Util.CheckTextarea(txt_News.Text)

Ja så kommer den med fejl uanset om den skal eller ej !?! Det virker da lidt underligt ?!?

/Websam
Avatar billede websam Nybegynder
13. juni 2005 - 09:52 #19
arne_v >> Havde du ingen idee til hvad der kunne være problemet ?

/Websam
Avatar billede arne_v Ekspert
13. juni 2005 - 10:09 #20
nej - det lyder meget mystisk - har du prøvet at udskrive txt_News.Text og
se hvad der faktisk står i den property ?
Avatar billede websam Nybegynder
13. juni 2005 - 10:23 #21
Ja og hvis jeg udskriver fra wysiwyg feltet hvor jeg f.eks har lavet en <b>tester</b> så udskriver den det, men jeg har lidt på fornemmelsen at det er noget i den editor der laver problemer da det som sagt virker fint på en almindelig textbox :o(

/Websam
Avatar billede websam Nybegynder
26. juli 2005 - 08:57 #22
Det ser tilsyneladende ikke ud til at virke på den editor jeg benytter mig af så jeg må finde en anden løsning :o(

/Websam
Avatar billede websam Nybegynder
11. august 2005 - 11:35 #23
Da din kode virker på en almindelig textbox skal du selvfølgelig have point så må jeg få lavet noget der virker på den wysiwyg editor jeg har.

/Websam
Avatar billede websam Nybegynder
06. september 2005 - 10:54 #24
Hej arne_v så fandt jeg ud af hvor den var galt jeg skulle skrive mine tilladte tags med småt :

Private Shared valid As ArrayList = New ArrayList(New String() {"strong", "b"})

Istedet for :

Private Shared valid As ArrayList = New ArrayList(New String() {"STRONG", "B"})

Men så har jeg et spørgsmål til <br> den slutter jo ikke af med </br> og kommer derfor med fejl, Hvordan løser jeg den ?

/Websam
Avatar billede arne_v Ekspert
06. september 2005 - 11:11 #25
beder folk skrive valid XHTML ??

:-)

måske skal testet udvides så slut tag bliver optional
Avatar billede websam Nybegynder
06. september 2005 - 11:15 #26
*GGGG* da de menesker der skal bruge dette ikke har den store erfaring med komputer aner de ikke hvad valid XHTML er ;o)

Hvordan laver jeg slut tag optional ?

/Websam
Avatar billede arne_v Ekspert
06. september 2005 - 20:42 #27
nu har jeg kigget lidt på koden - er slut tag ikke allerede optional ?
Avatar billede websam Nybegynder
06. september 2005 - 21:05 #28
Det er muligt at den er det men ikke desto mindre vil den ikke acceptere <br>
Avatar billede arne_v Ekspert
06. september 2005 - 21:18 #29
er br i valid listen ?
Avatar billede websam Nybegynder
06. september 2005 - 21:19 #30
jeps
Avatar billede websam Nybegynder
06. september 2005 - 21:20 #31
den kommer med fejl i den første løkke !
Avatar billede arne_v Ekspert
06. september 2005 - 21:40 #32
kan du poste hele koden som den ser ud nu ?
Avatar billede websam Nybegynder
06. september 2005 - 21:44 #33
Den kommer her :

Private Shared valid As ArrayList = New ArrayList(New String() {"em", "i", _
                                                                "strong", "b", _
                                                                "p", "br", _
                                                                "body", _
                                                                "u", _
                                                                "ul", "ol", "li", _
                                                                "a", _
                                                                "blockquote", _
                                                                "img"})

Public Shared Function CheckTextarea(ByVal Input As String)
    Dim strError As String
    strError = ""
    Dim res1 As MatchCollection = Regex.Matches(Input, "(?:<)([^/>][^>]*)(?:>)")
    Dim i As Integer
    For i = 0 To res1.Count - 1
        If Not valid.Contains(res1(i).Groups(1).Value) Then
            strError = "False"
        End If
    Next
    Dim res2 As MatchCollection = Regex.Matches(Input, "(?:</)([^>]+)(?:>)")
    For i = 0 To res2.Count - 1
        If Not valid.Contains(res2(i).Groups(1).Value) Then
            strError = "False"
        End If
    Next
    Return strError
End Function
Avatar billede websam Nybegynder
06. september 2005 - 21:44 #34
Og ja ja jeg ved godt at jeg ikke skal bruge Public Shared Function :o))
Avatar billede arne_v Ekspert
06. september 2005 - 21:57 #35
hm

ingen af

        Console.WriteLine(CheckTextArea("dette er HTML<br>"))
        Console.WriteLine(CheckTextArea("<br>dette er XHTML</br>"))

giver fejl hos mig !
Avatar billede websam Nybegynder
06. september 2005 - 22:35 #36
Ja det er fame underligt for når jeg køre test kan alle andre tags angivet i valid streng gå igennem, men bare ikke <br> el. <BR> og den kan jeg jo ikke undlade i min valid
Avatar billede websam Nybegynder
07. september 2005 - 09:16 #37
Hvad gør jeg ved dette ? Det er efterhånden ved at være godt irriterende :o(

Kender du en fornuftig wysiwyg editor der ikke ville brokke sig over dette ?

Den jeg benytter mig af lige nu kandu se her : http://www.freetextbox.com/

/Websam
Avatar billede arne_v Ekspert
07. september 2005 - 20:25 #38
og det er ikke et uppercase/lowercase problem ?
Avatar billede websam Nybegynder
14. september 2005 - 09:45 #39
Nu har jeg prøvet at kalde min function med :

Util.CheckTextarea(LCase(Den tekst jeg vil tjekke))

Og det hjælper stadigt ikke ? Men kan det ikke være fordi den ikke har en </br> som alle andre htmltags ?

/Websam
Avatar billede websam Nybegynder
14. september 2005 - 10:02 #40
Men tjekker jeg det på en almindelig textbox så virker det fint, bare ikke når jeg tester det på den s.... wysiwyg editor :o(

/Websam
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB