Archief - ASP: htmlspecialchars equivalent nodig of niet ?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

joyrider

Legacy Member
Hey allemaal,

ik ben bezig een website te maken die allemaal gegevens uit access database haalt nu die gegevens bevatten speciale tekens zoals < > & ed. nu volgens cse html validator moete die replace met &lt; &gt; &amp; ed.
In php hebde daarvoor de functie htmlspecialchars is er in asp een equivalent of moet ik ze zelf maken via string replaces?

ander vraagske is het echt nodig om die functie te gebruiken? ik gebruik ze momenteel dus niet op de gegevens die ik uit de db haal en als er zo'n tekens in voorkomen zie ik geen enkel probleem "gebeuren" door het niet gebruiken van de afkortingen voor de speciale tekens. data wordt mooi doorgegeven in post data en afgebeeld.

orez

Legacy Member
op vraag 1, er bestaat een functie ja, maar wegens het niet op mijn prog pc te zitten zal ik u die vraag nog even schuldig laten.

op vraag 2... redelijk domme opmerking infeite, TUURLIJK is dit nodig... altijd ...
Als je dit niet doet kan ik perfect javascript of zelfs php code in uw site steken...

<script> wordt dan &lt;script&gt; en zo onschadelijk...
Is ter beveiliging van uw site... Als je dat niet toepast is je site 1 groot lek.

RpR

Legacy Member
orez zei:
op vraag 1, er bestaat een functie ja, maar wegens het niet op mijn prog pc te zitten zal ik u die vraag nog even schuldig laten.

op vraag 2... redelijk domme opmerking infeite, TUURLIJK is dit nodig... altijd ...
Als je dit niet doet kan ik perfect javascript of zelfs php code in uw site steken...

<script> wordt dan &lt;script&gt; en zo onschadelijk...
Is ter beveiliging van uw site... Als je dat niet toepast is je site 1 groot lek.
Op het werk hebben we ook al zo een aanval gehad van iemand die zo probeerde binnen te breken adhv een tekstvak.

Ramm

Legacy Member
Ik heb mij daar vorige maand eens mee beziggehouden voor mijn webshop, omdat sommige talen helemaal verkeerd werden weergegeven. Deze functie converteert alle verschillende html-chars:

Code:
<%
'Place all the different characters in this string, separated by a |
strCharacters = "&|<|>|¡|¢|£|¥|¦|§|¨|©|ª|«|¬|®|&#8482;|¯|°|±|²|³|´|µ|¶|·|¸|¹|º|»|¼|½|¾|¿|×|÷|À|Á|Â|Ã|Ä|Å|Æ|Ç|È|É|Ê|Ë|Ì|Í|Î|Ï|Ð|Ñ|Ò|Ó|Ô|Õ|Ö|Ø|Ù|Ú|Û|Ü|Ý|Þ|ß|à|á|â|ã|ä|å|æ|ç|è|é|ê|ë|ì|í|î|ï|ð|ñ|ò|ó|ô|õ|ö|ø|ù|ú|û|ü|ý|þ|ÿ|&#338;|&#339;|&#352;|&#353;|&#376;|&#710;|&#732;|&#8211;|&#8212;|&#8216;|&#8217;|&#8218;|&#8224;|&#8225;|&#8230;|&#8240;|&#8249;|&#8250;|&#8364;"

'Place the HTML-codes for the characters in this string, separated by a |
strHTMLCodes  = "&amp;|&lt;|&gt;|&iexcl;|&cent;|&pound;|&yen;|&brvbar;|&sect;|&uml;|&copy;|&ordf;|&laquo;|&not;|&reg;|&trade;|&macr;|&deg;|&plusmn;|²|³|&acute;|&micro;|&para;|&middot;|&cedil;|¹|&ordm;|&raquo;|¼|½|¾|&iquest;|&times;|&divide;|&Agrave;|&Aacute;|&Acirc;|&Atilde;|&Auml;|&Aring;|&AElig;|&Ccedil;|&Egrave;|&Eacute;|&Ecirc;|&Euml;|&Igrave;|&Iacute;|&Icirc;|&Iuml;|&ETH;|&Ntilde;|&Ograve;|&Oacute;|&Ocirc;|&Otilde;|&Ouml;|&Oslash;|&Ugrave;|&Uacute;|&Ucirc;|&Uuml;|&Yacute;|&THORN;|&szlig;|&agrave;|&aacute;|&acirc;|&atilde;|&auml;|&aring;|&aelig;|&ccedil;|&egrave;|&eacute;|&ecirc;|&euml;|&igrave;|&iacute;|&icirc;|&iuml;|&eth;|&ntilde;|&ograve;|&oacute;|&ocirc;|&otilde;|&ouml;|&oslash;|&ugrave;|&uacute;|&ucirc;|&uuml;|&yacute;|&thorn;|&yuml;|&OElig;|&oelig;|&Scaron;|&scaron;|&Yuml;|&circ;|&tilde;|&ndash;|&mdash;|&lsquo;|&rsquo;|&sbquo;|&dagger;|&Dagger;|&hellip;|&permil;|&lsaquo;|&rsaquo;|&euro;"

'Create Arrays with the characters
arrHTMLChars = Split(strCharacters, "|")
arrHTMLCodes = Split(strHTMLCodes, "|")

function makeChars(text)
  charCounter = 0
  for charCounter = 0 to ubound(arrHTMLChars)
  	text = replace(text, arrHTMLChars(charCounter), arrHTMLCodes(charCounter)
  next
  
  makeChars = text
end function
%>
als er een éénvoudigere oplossing is, mag men dat natuurlijk altijd zeggen :D

Brock

Legacy Member
Als je jezelf zuiver wil beschermen tegen "sql injection" (= beveiliging tegen schadelijke/ongewenste invoer van de gebruiker - bvb dit intypen "' or 0=0" en wat brol toevoegen en ge zijt vertrokken: drop, empty, etc ):

- werk met parameters in uw sql statement ( SELECT bla FROM bla WHERE bla = @bla stuff )
- werk met stored procedures

joyrider

Legacy Member
ah had nog nooit van sql injection gehoord. heb wa ligge opzoeken en uitprobrere en ge kon idd foefelen met de code die dak tot nu toe had. die htmlspecial chars alleen was wel ni genoeg om die sql injection tegen te gaan.
quotes escapen en paar characters / woorden zoals ";" "select" "delete" etc replace met empty strings is wak nu ga gebruiken.

ah en ramm merci voor die functie moet ik ze zelf nimeer maken :)

Brock

Legacy Member
joyrider zei:
ah had nog nooit van sql injection gehoord. heb wa ligge opzoeken en uitprobrere en ge kon idd foefelen met de code die dak tot nu toe had. die htmlspecial chars alleen was wel ni genoeg om die sql injection tegen te gaan.
quotes escapen en paar characters / woorden zoals ";" "select" "delete" etc replace met empty strings is wak nu ga gebruiken.

ah en ramm merci voor die functie moet ik ze zelf nimeer maken :)

doe nu gewoon via een correcte manier ( zoals ik hierboven reeds vermeld heb ) ipv die omwegen:

cpy/paste van een andere site:

----------------
Dim thisCommand As SQLCommand = New SQLCommand("SELECT Count(*) " & _
"FROM Users WHERE UserName = @username AND Password = @password", Connection)
thisCommand.Parameters.Add ("@username", SqlDbType.VarChar).Value = username
thisCommand.Parameters.Add ("@password", SqlDbType.VarChar).Value = password

Dim thisCount As Integer = thisCommand.ExecuteScalar()

--------------

Die sql-injection is spijtiggenoeg bij veel mensen onbekend.
Ik herinner mij een microsoft meeting in de kinepolis in Brussel waar ze aan een zaal professionelen ( en wij, mct'ers ) vroegen of ze "sql injection" kenden. Die mannen vielen achterover :) Buiten de mct'ers waren er bitter weinig die hun hand opstaken ( onzen docent had uiteraard een keiharde grijns op z'n gezicht ;) )


joyrider

Legacy Member
da voorbeeld codeke kreeg ik niet werkend maar hebt opgelost door hetvolgende te doen, wat opzelfde neerkomt.

-------------------------------------------------
set con = server.createobject("ADODB.connection")
set command = server.createobject("ADODB.command")
set rs = server.createobject("ADODB.Recordset")
connstring="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb;Jet"
sqlstring = "SELECT * from tblartikel where omschrijving like ?"
con.open connstring
command.commandtext = sqlstring
command.commandtype = adcmdtext
set zoekstringparam = command.createparameter (,adVarChar, adParamInput,len(zoekstring) + 2,"%" & zoekstring & "%")
command.parameters.append zoekstringparam
command.activeconnection = con
rs.open command
...
---------------------------------------------------------------------------

Brock

Legacy Member
vb uit een projectje van mij:

Imports System.Data
Imports MySql.Data.MySqlClient

...

Private Function _GetGroupsByMailAdress(ByVal mailAdress As String, ByVal siteID As String) As ArrayList
Dim SQL As String = "SELECT Subscriber.ID_Groep FROM Subscriber,SubscribeGroep WHERE Subscriber.MailAdress = ?MailAdress AND SubscribeGroep.ID_Groep = Subscriber.ID_Groep AND SubscribeGroep.ID_Site = ?ID_Site"

Dim dbpMailAdress As New MySqlParameter("?MailAdress", mailAdress)
Dim dbpID_Site As New MySqlParameter("?ID_Site", siteID)

Dim DT As DataTable = _mysqlBase.GetDT(SQL, dbpMailAdress, dbpID_Site)
Dim DR As DataRow
Dim arrIDs As ArrayList = New ArrayList

For Each DR In DT.Rows
arrIDs.Add(DR.Item("ID_Groep"))
Next

Return arrIDs
End Function

Obliv`

Legacy Member
euh tis gewoon ASP he brock ;)

en inderdaad, als ge gene last wilt hebben met sql injection, gebruik dan command en parameters om uw statement op te bouwen
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan