webForumDet fria alternativet

html-taggar i textfält

.NET

10 svar · 568 visningar · startad av freddyk

Medlem sedan okt. 2006103 inlägg
Frågan#1

Hur gör man för att kunna använda html-kod i en sträng som lagras i databasen?

Har testat att lagra ex <br/> eller <ul> men det genererar ett error: A potentially dangerous Request.Form value was detected from the client .

Någon som har idéer?

Tacksam för hjälp.

SQL server 2005 och asp.net 2.0

Medlem sedan feb. 2005280 inlägg
#2

Antingen gör du om taggar till & gt; och & lt; istället, eller så sätter du i Page direktivet ValidateRequest="false" så skippas varningen.

Medlem sedan jan. 2007152 inlägg
#3

Det där är ett skydd mot skadlig kod som kom med .net 2 men det går exempelvis att stänga av helt på en sida med ValidateRequest="false" i page-direktivet. Eller så ersätter du < med &lt ;

HttpUtility.HtmlEncode(MyTextBox.Text);

Red. freguz hann visst före... :)

Medlem sedan feb. 2005280 inlägg
#4

butiko skrev:

Det där är ett skydd mot skadlig kod som kom med .net 2 men det går exempelvis att stänga av helt på en sida med ValidateRequest="false" i page-direktivet. Eller så ersätter du < med &lt ;

HttpUtility.HtmlEncode(MyTextBox.Text);

Red. freguz hann visst före... :)

Här är vi på hugget! :birp

Medlem sedan okt. 2006103 inlägg
#5

hehe man tackar för de blixtsnabba svaren. Kanske bättra att ersätta < än att stänga av valideringen. Dock har jag en följdfråga... Hur presenterar man texten och html-snuttarna korrekt sedan när texten hämtas upp igen?

Medlem sedan jan. 2007152 inlägg
#6
HttpUtility.HtmlDecode
Medlem sedan feb. 2005280 inlägg
#7

Fiffigt kan ju oxå vara att göra som så att man har en lista (array eller nåt) över taggar som är ok att lagra, tex i webconfig en appsetting som heter typ

<add key="SafeHtmlTags" value="b,i,u,br"/>

så man får lite koll på vad som lagras, kan bli tokigt när nån skriver

 <script>location.href='http://www.anna.com';</script>

i posten :)

Medlem sedan okt. 2006103 inlägg
#8

freguz skrev:

Fiffigt kan ju oxå vara att göra som så att man har en lista (array eller nåt) över taggar som är ok att lagra, tex i webconfig en appsetting som heter typ

<add key="SafeHtmlTags" value="b,i,u,br"/>

så man får lite koll på vad som lagras, kan bli tokigt när nån skriver

 <script>location.href='http://www.anna.com';</script>

i posten :)

Tack för svaren! :)

Söker jag igenom textsträngen sen efter de värden som lagras i den arrayen och sparar ifall de finns?

hmm.. Hur hämtar jag in den arrayen från webconfig?

Medlem sedan feb. 2005280 inlägg
#9

Så här kan man skriv tex:

string[] SafeTags = System.Configuration.ConfigurationManager.AppSettings["SafeHtmlTags"].ToString().Split(',');

sen kan ju bara loopa igenom dom o kolla om det matchar i nån funktion typ:

public static bool IsSafe(string userInputTag)
{
  foreach(string tag in SafeTags)
  {
    if(tag.ToLower() == userInputTag.Trim().ToLower())
        return true;
  }
  return false;
}
Medlem sedan okt. 2006103 inlägg
#10

Gott! man tackar.... Suverän hjälp!

En sista fråga (hoppas jag) Det verkar ju inte (efter att jag testat) som att man kan skriva in <, > o liknande utan att den skickar felmeddelandet ovan... Kan man kringgå detta förutom att sätta PageValidation=false?

Jobbigt för användaren att komma ihåg < m m... Vore bra om han kunde skriva < och att koden omvandlade det till < utan att felmeddelandet kommer...

Eller har jag möjligtvis gjort ngt knas... he he

Medlem sedan jan. 2007152 inlägg
#11

Hm, såg nu att du måste ValidateRequest="false" oavsett du använder htmlencode eller inte. Men använder du htmlencode så riskerar du ju aldrig att ett fungerande script kommer ut på sidan utan det bestämmer du ju själv vad du ska trolla tillbaka. Men sätt INTE htmldecode på hela texten igen innan du lägegr ut den för då gör den ju ingen nytta! :)

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)