Avatar billede websam Nybegynder
17. september 2005 - 09:42 Der er 38 kommentarer og
1 løsning

Fjerne uønskede Html tags

Hejsa,

Da jeg efterhånden er ved at få grå hår af en function der validere på intastede html tags vil jeg høre om der er en der kan hjælpe mig med at få lavet en function der fjerner alle html tags undtaget nogle angivet i en liste ?

Det jeg har pt. validere på hvilke html tags der er skrevet og det virker fint på en almindelig textbox, men når jeg køre det på en wysiwyg editor vil den ikke acceptere alle tags og udskriver derfor fejl.

Håber der er en der kan hjælpe med det ?

/Websam
Avatar billede jokkejensen Novice
17. september 2005 - 10:29 #1
Fra MSDN
ValidateRequest
Indicates whether request validation should occur. If true, request validation checks all input data against a hard-coded list of potentially dangerous values. If a match occurs, an HttpRequestValidationException Class is thrown. The default is true.
This feature is enabled in the machine configuration file (Machine.config). You can disable it in your application configuration file (Web.config) or on the page by setting this attribute to false.


Den fjerner den validering der er på farlige requests, og de kan altså gå igennem, tilføjes som false i page directive..
Avatar billede jokkejensen Novice
17. september 2005 - 10:33 #2
Du kan også fjerne det gennem Regex, jeg bruger "<[^>]*>" men den tager ikke så godt højde for javascript mm.
Avatar billede websam Nybegynder
17. september 2005 - 10:33 #3
Ja det er jeg med på og den er sat til false og hvad så når en eller anden person begynder og lege med javascript i min editor så kan denne person lave mange grumme ting ved min side ?

/Websam
Avatar billede nielle Nybegynder
17. september 2005 - 10:37 #4
JavaScript fjernes ved at RegEx'e på mønsteret:

<\s*script.*?/script\s*>

- og så lave en Relace med "" (husk IgnoreCase).

Husk dog at gøre dette før at du begynder at fjerne html-tags'ene.
Avatar billede websam Nybegynder
17. september 2005 - 10:42 #5
Jeg tror denne burde gøre en del ved det hele eller hvad ar jeres mening om denne :

Private Function FormatDisableScripting(ByVal strInput As String) As String
    Dim TempInput As String = strInput

    Dim options As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Singleline
    Dim strReplacement As String = " "
    Dim strPattern As String = "<script[^>]*>.*?</script[^><]*>"

    TempInput = Regex.Replace(TempInput, "<script[^>]*>.*?</script[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<input[^>]*>.*?</input[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<object[^>]*>.*?</object[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<applet[^>]*>.*?</applet[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<form[^>]*>.*?</form[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<option[^>]*>.*?</option[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<select[^>]*>.*?</select[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<iframe[^>]*>.*?</iframe[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<form[^>]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "</form[^><]*>", strReplacement, options)
End Function

Fnadt den inde på asp.net's forum og den tilhøre DotNetNuke

/Websam
Avatar billede nielle Nybegynder
17. september 2005 - 11:25 #6
Hmm, bortset fra at den ikke returnerede noget, og at der er et par overflødige linjer, og at der manglede noget - så var den da inde på noget af det rigtige:

Private Function FormatDisableScripting(ByVal strInput As String) As String
    Dim TempInput As String = strInput

    Dim options As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Singleline
    Dim strReplacement As String = " "

    TempInput = Regex.Replace(TempInput, "<script[^>]*>.*?</script[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<object[^>]*>.*?</object[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<applet[^>]*>.*?</applet[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<iframe[^>]*>.*?</iframe[^><]*>", strReplacement, options)

    TempInput = Regex.Replace(TempInput, "<form[^>]*>.*?</form[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<input[^>]*>.*?</input[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<[/]?textarea>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<option[^>]*>.*?</option[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<select[^>]*>.*?</select[^><]*>", strReplacement, options)

    FormatDisableScripting = TempInput
End Function
Avatar billede websam Nybegynder
17. september 2005 - 11:31 #7
Cool, og hvis nu jeg bare vil have en function der bare fjerner alle html tags vil dette så være nok :

Private Function RemoveHtml(ByVal Input As String) As String
    Dim strInput As String
    Dim strOutput As String
    strInput = Input
    strOutput = Regex.Replace(strInput, "<[^>]*>", " ")
    Return strOutput
End Function

For så tror jeg, jeg kan klare mig et godt stykke af vejen

Og med hensyn til din validering ovenfor kunne dette så ikke være en god ide at tage med :

TempInput = Regex.Replace(TempInput, "java script:", strReplacement, options)
TempInput = Regex.Replace(TempInput, "vbscript:", strReplacement, options)

Bare som en ekstra sikring ?

/Websam
Avatar billede nielle Nybegynder
17. september 2005 - 11:40 #8
> Cool, og hvis nu jeg bare vil have en function der bare fjerner alle html tags vil dette så være nok ...

Ja, men så vil du imidlertid opleve at JavaScript kommer til at stå som klartekst midt på din side - altså ikke som JavaScript mere, men som tekst.

> Og med hensyn til din validering ovenfor kunne dette så ikke være en god ide at tage med ...

Nej, for det er der allerede taget hånd om med:

TempInput = Regex.Replace(TempInput, "<script[^>]*>.*?</script[^><]*>", strReplacement, options)
Avatar billede websam Nybegynder
17. september 2005 - 11:43 #9
Hvis så min function ser således ud :

Private Function RemoveHtml(ByVal Input As String) As String
    Dim strInput As String
    Dim strOutput As String
    strInput = Input
    strOutput = Regex.Replace(strInput, "<[^>]*>", " ")
    strOutput = Regex.Replace(strInput, "<script[^>]*>.*?</script[^><]*>", " ")
    Return strOutput
End Function

Vil den så ikke fjerne det ?

/Websam
Avatar billede websam Nybegynder
17. september 2005 - 11:49 #10
Lad os antage at der i et img tag bliver skrevet noget javascript i onload function så bliver det jo ikke nakket hvis ikke jeg har disse med :

TempInput = Regex.Replace(TempInput, "java script:", strReplacement, options)
TempInput = Regex.Replace(TempInput, "vbscript:", strReplacement, options)

Eller misser jeg noget ?

/Websam
Avatar billede nielle Nybegynder
17. september 2005 - 11:54 #11
Din funktion 17/09-2005 11:43:51 kan rettes til:

Private Function RemoveHtml(ByVal Input As String) As String
    Input = Regex.Replace(Input, "<script[^>]*>.*?</script[^><]*>", " ")
    Input = Regex.Replace(Input, "<[^>]*>", " ")
    Return Input
End Function

- specielt er det en god ide at fjerne scriptet *før* at du begynder på html-tagsene.
Avatar billede websam Nybegynder
17. september 2005 - 11:58 #12
Hvad med dette 17/09-2005 11:49:11
Avatar billede nielle Nybegynder
17. september 2005 - 11:58 #13
17/09-2005 11:49:11>

Det er rigtigt set, men det er faktisk ikke nok at fjerne "java script:" og "vbscript:",  idet scriptene alligevel vil blive kørt (faktsisk er de selet ikke en del af standarden - selv om mange tror det).

I stedet burde du gå efter *hele* OnLoad-, OnClick-, OnMouseuver-, OnMouseout-, OnChange-, etc. etc., -attributten og fjerne denne.
Avatar billede nielle Nybegynder
17. september 2005 - 11:59 #14
Rolig nu... giv mig dog lige tid til at skrive ;^)
Avatar billede websam Nybegynder
17. september 2005 - 11:59 #15
Og hvorledes nakker jeg lige dem udfra ovenstående ?
Avatar billede websam Nybegynder
17. september 2005 - 12:01 #16
Sorry mester, nu ikke så morgen gnaven *GGG*
Avatar billede nielle Nybegynder
17. september 2005 - 12:18 #17
Tja, så gælder det jo lige om at huske alle de mulige. Der er i hvert fald disse her:

OnChange
OnClick
OnBlur
OnFocus
OnLoad
OnMouseOver
OnMouseOut
OnSelect
OnSubmit
OnUnload

Men, venlt lige..., nej det er jo faktisk ikke nødvendigt at overhovedet gøre noget ved dem. De bliver jo faktisk slettet når at du sletter html-tagsene:

Private Function RemoveHtml(ByVal Input As String) As String
    Dim options As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Singleline

    Input = Regex.Replace(Input, "<script[^>]*>.*?</script[^><]*>", " ", options)
    Input = Regex.Replace(Input, "<[^>]*>", " ", options)

    Return Input
End Function
Avatar billede websam Nybegynder
17. september 2005 - 12:31 #18
Det var nu tænkt til den function der fjerner skadelig html fra min editor :

Private Function FormatDisableScripting(ByVal strInput As String) As String
    Dim TempInput As String = strInput

    Dim options As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Singleline
    Dim strReplacement As String = " "

    TempInput = Regex.Replace(TempInput, "<script[^>]*>.*?</script[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<object[^>]*>.*?</object[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<applet[^>]*>.*?</applet[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<iframe[^>]*>.*?</iframe[^><]*>", strReplacement, options)

    TempInput = Regex.Replace(TempInput, "<form[^>]*>.*?</form[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<input[^>]*>.*?</input[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<[/]?textarea>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<option[^>]*>.*?</option[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<select[^>]*>.*?</select[^><]*>", strReplacement, options)

    FormatDisableScripting = TempInput
End Function
Avatar billede nielle Nybegynder
17. september 2005 - 12:40 #19
Nu var det jo dig selv som begyndte at snakke om et alternativ til denne kode, så jeg troede egentlig at du havde opgivet den.

Det kan gøres sådan her:

Private Function FormatDisableScripting(ByVal strInput As String) As String
    Dim TempInput As String = strInput

    Dim options As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Singleline
    Dim strReplacement As String = " "

    TempInput = Regex.Replace(TempInput, "<script[^>]*>.*?</script[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<object[^>]*>.*?</object[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<applet[^>]*>.*?</applet[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<iframe[^>]*>.*?</iframe[^><]*>", strReplacement, options)

    TempInput = Regex.Replace(TempInput, "OnChange\s*=[""']?.*?[""']?", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "OnClick\s*=[""']?.*?[""']?", strReplacement, options)
    ' osv for alle de andre events.

    TempInput = Regex.Replace(TempInput, "<form[^>]*>.*?</form[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<input[^>]*>.*?</input[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<[/]?textarea>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<option[^>]*>.*?</option[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<select[^>]*>.*?</select[^><]*>", strReplacement, options)

    FormatDisableScripting = TempInput
End Function

- eller bare sådan:

Private Function FormatDisableScripting(ByVal strInput As String) As String
    Dim TempInput As String = strInput

    Dim options As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Singleline
    Dim strReplacement As String = " "

    TempInput = Regex.Replace(TempInput, "<script[^>]*>.*?</script[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<object[^>]*>.*?</object[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<applet[^>]*>.*?</applet[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<iframe[^>]*>.*?</iframe[^><]*>", strReplacement, options)

    TempInput = Regex.Replace(TempInput, "OnChange", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "OnClick", strReplacement, options)
    ' osv for alle de andre events.

    TempInput = Regex.Replace(TempInput, "<form[^>]*>.*?</form[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<input[^>]*>.*?</input[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<[/]?textarea>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<option[^>]*>.*?</option[^><]*>", strReplacement, options)
    TempInput = Regex.Replace(TempInput, "<select[^>]*>.*?</select[^><]*>", strReplacement, options)

    FormatDisableScripting = TempInput
End Function
Avatar billede websam Nybegynder
17. september 2005 - 12:43 #20
Nej det er for at have både den ene og den anden da jeg på en side med min editor også har almindelige textbox'e der ikke må indeholde noget html over hovedet ;o)
Avatar billede nielle Nybegynder
17. september 2005 - 12:48 #21
Ok, så... Men måske skulle du en anden gang prøve at holde tingene en lille smule adskildt for at forhindre forvirring :^|
Avatar billede websam Nybegynder
17. september 2005 - 13:17 #22
Hvad går der galt når uanset hvad jeg skriver i min editor bliver slettet når jeg prøver at udskrive det på siden, dette er først kommet efter jeg prøver min function af på editorens output ?
Avatar billede websam Nybegynder
17. september 2005 - 14:04 #23
Det hjælper og lave en Return

Smid et svar, og tak for hjælpen ;o)
Avatar billede nielle Nybegynder
17. september 2005 - 14:06 #24
... ja det andet var vist VBScript :^|

Oki :^)
Avatar billede websam Nybegynder
17. september 2005 - 14:14 #25
Men jeg har lige lavet en lille test på dette :

<img  onload="java script:load" />

og der gemmer den dette :

<img  java script:load" />

Det er ikke helt optimalt vel ;o)
Avatar billede websam Nybegynder
17. september 2005 - 14:15 #26
Jeg har benyttet denne type :

TempInput = Regex.Replace(TempInput, "OnLoad\s*=[""']?.*?[""']?", strReplacement, options)
Avatar billede nielle Nybegynder
17. september 2005 - 14:36 #27
Ah, ja. Denne her variation er nok lidt bedre:

TempInput = Regex.Replace(TempInput, "OnLoad\s*=[""']?.+?[""']?", strReplacement, options)
Avatar billede websam Nybegynder
17. september 2005 - 14:45 #28
Så får jeg dette resultat :

<IMG avascript:load?>
Avatar billede nielle Nybegynder
17. september 2005 - 14:55 #29
Hmm, jeg ved ikke rigtigt om sådan noget kode som:

<img  onload=java script:load />

- virker. Altså hvor der ikke er hverken "-tegn eller '-tegn rundt om javascript-kroppen. Men hvis vi nu antager at det *altid* er enten et '- eller et "-tegn tilstede, så kan koden laves sådan her:

TempInput = Regex.Replace(TempInput, "OnLoad\s*=[""'].+?[""']", strReplacement, options)
Avatar billede nielle Nybegynder
17. september 2005 - 15:06 #30
... eller denne her:

TempInput = Regex.Replace(TempInput, "OnLoad\s*=\s*([""'])[^\1]+\1", strReplacement, options)
Avatar billede websam Nybegynder
17. september 2005 - 15:16 #31
ok, men den editor jeg benytter (http://www.freetextbox.com) fjerner dem tilsyneladende i koden inden der gemmes/vises. Om det er noget de bevidst har gjort ved jeg ikke.

/Websam
Avatar billede nielle Nybegynder
17. september 2005 - 15:20 #32
Hvad er det den fjerner? "dem" ... er det "- og '-tegnene? For så laver den da ulovligt JavaScript-kode ud af lovlig.
Avatar billede websam Nybegynder
17. september 2005 - 15:34 #33
Hvis du prøver at gå ind på deres side http://www.freetextbox.com der ligger en demo på deres forside og smider dette ind i html mode :

<IMG src="" onload="java script:load">

slår over i design mode og gåt tilbage i html mode så her den fjernet "" og evt. ''
Avatar billede websam Nybegynder
17. september 2005 - 15:37 #34
Den gør det samme med alle html tags der fjernes alle "" oxo
Avatar billede nielle Nybegynder
17. september 2005 - 15:53 #35
Så syens jeg at du skal kaste dig over en anden editor - den der laver non-standard kode ud af pæn standard-kode. Det kan kun ende med at give dig en masse problemer. :^(
Avatar billede websam Nybegynder
17. september 2005 - 15:56 #36
Nogle links til noget godt ?
Avatar billede nielle Nybegynder
17. september 2005 - 15:57 #37
Jeg har ingen anelse om den er god, men der er i hvert fald mange som bruger den:

http://www.fckeditor.net/
Avatar billede websam Nybegynder
17. september 2005 - 17:08 #38
Jeg fik lige læst lidt mere på FreeTextBox og den har en function der smider valid xhtml som følger :

FreeTextBox.XHtml

istedet for :

FreeTextBox.Text

på den måde virker den ovenstående kode helt efter planen den fjerne det der ikke må være der således at følgende :

<IMG src="..icons/n_movedown.gif" onmouseover="java script:test">

bliver til :

<IMG src="..icons/n_movedown.gif">

så kan det vist ikke være anderledes ;o)

/Websam
Avatar billede nielle Nybegynder
17. september 2005 - 17:23 #39
HTML eller XHTML - den burde nu under ingen omstændigheder have fjernet "-tegnene. :^|

Ah, well ... tak for point :^)
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