---
title: "Säkerhet på hemsidan/servern!?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/91362-säkerhet-på-hemsidan-servern/page2"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "jvc_man"
published: "2003-11-26T19:15:32.000Z"
updated: "2003-12-02T23:25:39.000Z"
replies: 46
views: 1711
page: 2
pages: 3
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/91362-säkerhet-på-hemsidan-servern"
---

# Säkerhet på hemsidan/servern!?

_Sida 2 av 3._

## #21 — colione, 2003-11-27T12:42Z

Det var ett exempel, det som jag beskrev är inte det allvarligaste med SQL-injection, utan det är att du kan köra program som ligger på servern.

Du avlsutar exempelvis SQL-satsen med ' och sedan så kan du till exempel anropa CMD.exe med kommandon bakom...du kan exemeplvis starta om servern, eller ännu värre säga åt servern att ladda hem ett program som sedan körs på servern.

Så gör en funktion som ersätter ' (en enkelfnutt) med '' (två enkelfnuttar) på så sätt, slipper du fundera på om han kan köra en application/ta sig in utan lösen.

Läs gärna igenom den här: :)

<http://www.nextgenss.com/papers/advanced_sql_injection.pdf>

Den är ganska lång men det är bra läsning, du kommer kunna ganska mycket om Injection då.

Även den här (som dock inriktar sig mer på att manipulera forumkod) är bra:

<http://www.wiretrip.net/rfp/txt/rfp2k01.txt>

Det du ska göra är att se till att leta reda på och escapa/ta bort/ersätta eventuella ' i variabler du inte vet innehållet i.

Gör alltså gärna en funktion som du kör alla variabler som du inte själv sätter värdet på igenom.

Permalänk: https://www.webforum.nu/p/1214661

## #22 — jvc_man, 2003-11-27T13:37Z

Tack för svaret, jag skall kolla igenom dina två länkar, det bästa är nog att jag genererar att det är ett fel, dvs att de har angivet ett felaktigt tecken, dvs jag kan nog skapa en funktion som kontrollerar om det finns tecken i strängen som skiljer sig från alfabetet samt siffror.

Tack så mycket, mvh Björn

Permalänk: https://www.webforum.nu/p/1214696

## #23 — jvc_man, 2003-11-27T15:21Z

Hej, nu kommer jag igen med mina inlägg...  =/

Detta är till: colione

Jag har läst igenom allt nu som fanns i dina länkar, intressant fakta faktiskt! Dock så måste jag erkänna att jag inte alls är så bra på att skriva egna funktioner i javascript /Jscript och sedan anropa dem och få fram värdet true eller false som jag skulle behöva få fram i detta fallet.

Jag kan göra som så (finns 3 funktioner på sida 23 i din första länk), att jag använder de tre funktionerna i mina asp-filer där jag brukar forumlär, kontrollerar allt som skrivs in, och om någon av de funktionerna genererar false så avslutar jag allt direkt, och genererar att ex. ett otillåtet tecken har angivits...

Men som sagt, jag får det ej att fungera, kan ej / vet ej hur jag skall göra med funktionerna, har skrivit av dem och försökt använda dem, men funkar ej...

Skulle ni möjligtvis vilja vara super schyst och hjälpa mig med det, ex. kopiera en av funktionerna och använd den i en liten sats, dvs göra en liten asp-kod som skulle funkat i ex. index.asp

så att jag kan testa samt förstå och fortsätta på egen hand,
Hoppas ni vill och kan hjälpa mig, i sådana fall evigt tacksam!  =)

Mvh Björn

Permalänk: https://www.webforum.nu/p/1214751

## #24 — colione, 2003-11-27T19:18Z

Jag tycker inte du ska rikta din fråga till mig, utan till alla, då detta är ett forum ;)

Om jag sedan ska vara helt ärlig så var det ett ganska bra tag sen jag satt och pillade med VBScript (är mer inne på JavaScript och Python nu), men en kopiering rakt av borde funka.

Vad är det för fel du har fått då/vad funkar inte?

En klientlösning med javascript är inte att rekomenderar då en hackare kan stänga av javascript i sin webbläsare....

Vi kan ju alltid hoppas att någon med mer VBscript kunskaper än jag förbarmar sig.. :)

Permalänk: https://www.webforum.nu/p/1214851

## #25 — jvc_man, 2003-11-27T20:33Z

Hej!

Okey, jag förstår dig, det jag har problem med är:

Vart jag skall placera funktionen, vilket script språk jag skall skriva ovan, hur jag skall anropa funktionen, hur jag får ut värden ur funktionen, dvs typ allt gällande detta med egna funktioner...

Skulle någon kunna vara vänlig och kolla in denna länken, sida 25:

<http://www.nextgenss.com/papers/adv...l_injection.pdf>

Sedan om någon känner på sig att de kan hjälpa mig att klura ut detta, dvs hur jag skall använda mig utav funktionen/funktionerna får mer än gärna skriva hur/ett inlägg!

OBS: Tack för hjälpen "colione"!

Mvh Björn

Permalänk: https://www.webforum.nu/p/1214879

## #26 — jvc_man, 2003-11-28T10:30Z

Är det ingen som vet något om hur man gör egna funktioner och använder dem som i denna länk: sida 25:

<http://www.nextgenss.com/papers/adv...l_injection.pdf>

Måste väl finnas någon som är bra på sql-injection...\*hoppas\*

Mvh Björn

Permalänk: https://www.webforum.nu/p/1215090

## #27 — colione, 2003-11-28T14:07Z

Du kan placera den funktionen var du vill, som du antagligen ser är den skriven i VBScript, det bör vara att bara kopiera över den till dokumenten som du behöver använda den i...

Sedan för varje varabel du hämtar in till din sida.

T.ex Dim namn=Request.Form("namn")

Sedan skulle jag satsa på version 2 av de tre olika scripten.

Alltså bara att anropa med:

(Pseudokod)

```
OM validate_string(namn) inte lika med TRUE
```

Eller likannde

Tänk dessutom på att om du kör med Option Explicit att DIMma dina variabler.

Permalänk: https://www.webforum.nu/p/1215191

## #28 — LR^evil.sid, 2003-11-28T17:08Z

Länken var bruten när jag skulle kika på den...

```
<%
	Dim pwd, usr, SQL
	pwd = "phew"
	usr = "hopp'san"

	Function FixInjection(StrTxt)
		StrTxt = "" & StrTxt
		StrTxt = Replace(StrTxt, Chr(34), Chr(34) & Chr(34))
		StrTxt = Replace(StrTxt, Chr(39), Chr(39) & Chr(39))
		FixInjection = StrTxt
	End Function

	SQL = "SELECT field1, field2 "&_
	      "FROM table "&_
	      "WHERE anvandarnamn = '"&Trim(FixInjection(usr))&"'" "&_
	      "AND losenord = '"&Trim(FixInjection(pwd))&"'"
'	SQL = "SELECT field1, field2 "&_
'	      "FROM table "&_
'	      "WHERE anvandarnamn = '"&Trim(usr)&"'" "&_
'	      "AND losenord = '"&Trim(pwd)&"'"
%>
```

Nu har jag iofs inte testat koden men prova att köra de olika SQL-frågorna mot din databas och se vad som händer.

Permalänk: https://www.webforum.nu/p/1215259

## #29 — jvc_man, 2003-11-29T08:32Z

Tack för svaret och besväret, skall testa koden snarast, hoppas det funkar, dock ser det lovande ut ju!   =)

Mvh Björn

Permalänk: https://www.webforum.nu/p/1215432

## #30 — Erik Juhlin, 2003-11-29T13:58Z

Verkar vara mycket flummande och felaktiga uppgifter som skrivs här, så jag ska försöka klara upp lite.

Citattecken ( " ) behöver man inte escapa eftersom att de vanligtvis inte används i SQL.

Apostrofer ( ' ) bör man escapa med två apostrofer. ( '' )

För att vara extra säker kan man skriva så här:

```
sql = "SELECT * FROM tblUser WHERE UserName = '" & sUserName & "'"

'hämta rs
If rs("UserPassword") = sUserPassword Then
	'inloggad
Else
	'ej inloggad
End If
```

Högerklicksskydd och andra JavaScript förhindrar inte crackers utan förhindrar bara vanliga användare från att navigera sig runt på sidan.

Databasen bör ligga utanför web-roten som sagts tidigare.

Viktigt att web-hotellet har hög säkerhet. Brandvägg och sånt är viktigt.

Använd Session istället för Response.Cookies.

Glöm inte att kolla i Session på varje sida om man är inloggad eller inte.

Använd gärna en kryptering för lösenord. Helst envägskryptering.

SSL är viktigt vid inloggningsformulär.

Permalänk: https://www.webforum.nu/p/1215512

## #31 — jvc_man, 2003-11-29T23:46Z

Hej!

Tacl för era svar och er hjälpt, skall försöka bruka funktionerna som filtrerar bort " ' " m.m. och om något sånt tecken har angets så skall det genereras ett fel till användaren.
Jag använder självfallet Session och på varje sida kontrollerar jag om de är inloggade, dock endast de sidor som är för registrerade medlemar!  ;)

Hur använder man kryptering för lösenord?
SSL?

Det webhotellet jag har är  Citynetwork och de verkar ha bra säkerhet, dock återstår det att se!

Tack som sagt för alla svar, skall se över alla inlägg och alla kod samt fakta på måndag (är på Tattoo Expo mässan i Malmö nu som försäljare).

Mvh Björn M

Permalänk: https://www.webforum.nu/p/1215646

## #32 — jvc_man, 2003-12-02T12:32Z

Tack för all hjälp jag fått av er alla, mycket tacksam!

Har gjort flera funktioner som fixar till säkerheten lite i alla fall!  =)

Mvh Björn

Permalänk: https://www.webforum.nu/p/1219517

## #33 — SannyW, 2003-12-02T13:33Z

Nu var kanske alla mätta och glada över ämnet,  men jag bifogar ändå lite kod. 

Tycker det funkar ganska bra att man loggar de misslyckade inloggnings försöken så vet man vad som har gjorts.

koden kanske inte är 100%-ig, men den funkar och kan kanske vara till hjälp för någon.

Är det sedan någon som tycker att någon kan göras annorlunda för att förbättra så kom gärna med synpunkter. 

```
<%
Function escape(input)
	input = Replace(input, "'", "''")
	escape = input
End Function

if Request.Form("user") = "" AND Request.Form("password") = "" then
   Response.Redirect "login.asp"
End if

if Request.Form("user")<>"" OR Request.Form("password")<>"" then 
Set MinCon = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
MinCon.Open Conn_String
SQL = "SELECT * From users WHERE anv = '" & escape(Request.Form("user")) & "'"
rs.Open SQL, MinCon, 1, 2

If rs.EOF Then
  
   	datum = now
	action = "Someone tried to login with username: <b>" & escape(Request.Form("user")) & "</b> and password: " & escape(Request.Form("password")) & ""
	ip = Request.ServerVariables("REMOTE_ADDR")
	
set conn1 = Server.CreateObject("ADODB.Connection")
conn1.open Conn_String
cmdSQLinsert2 = "insert into logging (datum, action, ip) values ('" & datum & "', '" & action & "', '" & ip & "')"
 conn1.Execute cmdSQLinsert2
	
	
conn1.Close
set conn1 = nothing
   Response.Redirect "login.asp"
End IF

If Not rs("pass")=Request.Form("password") Then
  
   	datum = now
	action = "<b>" & escape(Request.Form("user")) & "</b> tried to log in with password: " & escape(Request.Form("password")) & ""
	ip = Request.ServerVariables("REMOTE_ADDR")
	
set conn1 = Server.CreateObject("ADODB.Connection")
conn1.open Conn_String
cmdSQLinsert2 = "insert into logging (datum, action, ip) values ('" & datum & "', '" & action & "', '" & ip & "')"
 conn1.Execute cmdSQLinsert2
	
	
conn1.Close
set conn1 = nothing
   Response.Redirect "login.asp"
Else
   Session("anvandarnamn")=rs("anv")
   Session("losenord")=Request.Form("password")
   Session("connected")=1
   Session("lvl")=1
   Session("id")=rs("id")
	datum = now
	action = "User: <b>" & Session("anvandarnamn") & "</b> logged in"
	ip = Request.ServerVariables("REMOTE_ADDR")
	
set conn2 = Server.CreateObject("ADODB.Connection")
conn2.open Conn_String
cmdSQLinsert = "insert into logging (datum, action, ip) values ('" & datum & "', '" & action & "', '" & ip & "')"
 conn2.Execute cmdSQLinsert
	
	
conn2.Close
set conn2 = nothing
End if

if session("connected")=1 then
   Response.redirect "main.asp" 
end if 

%>
<%end if %>
```

Permalänk: https://www.webforum.nu/p/1219549

## #34 — jvc_man, 2003-12-02T15:46Z

Tjena!

Det känns lite onödigt att spara info om inloggningar (misslyckade), du kan ändå inte göra något, förutom typ spärra ip-numret, men flera anv. kan använda samma ipnummer...

Det bästa med min säkerhet på hemsidan förutom alla de funktioner jag gjort nu är att jag först hämtar all data från tabellen som har hand om kunder sedan jämför jag värdet som jag plockat ut med det som användaren skrev in, dock så har jag redan denna procedur kontrollerat det som anv. skrev in med funktionerna.

Många glada hälsningar!

Permalänk: https://www.webforum.nu/p/1219607

## #35 — jvc_man, 2003-12-02T20:39Z

Tjena igen!

Har dykt upp ett litet bekymmer  =(  \*igen\*
Man kan ju ladda ned databasen från databasmappen som finns på servern, enkelt sagt: man kan komma åt databasen enkelt...

Finns det något sätt att stoppa detta?
Databasen ligger självfallet utanför root, dock så finnes sökvägen till databasen i en inc-fil som behandlar kopplingen till databasen, och den kan man ju också komma åt...

Om man lösenordsskyddar databasen så finns lösenordet i asp-filen (eller finns det något annat sätt), och då kan man ju komma åt detta också...

Någon som har något bra tips om hur man skyddar databasen med lösenord samt hur man skall göra det svårt för någon att ladda hem databasen, anledningen till att de kan ladda hem den (enligt webhotellet) är för att databasen tillåter skrivning, och det måste den ju göra, för de inloggade medlemarna...

Mvh en åter förvirrad björn

Permalänk: https://www.webforum.nu/p/1219707

## #36 — niko, 2003-12-02T20:51Z

> Finns det något sätt att stoppa detta?

Man tar bort nerladdningsrättigheterna på databasen (eller mappen där den ligger).

> Databasen ligger självfallet utanför root

Det gör den väl knappast om den går att ladda ner? Men annars finns det ingen anledning att lägga den utanför roten. Det ger bara krångel med hårdkodade absoluta sökvägar som inte följer med när man flyttar sajten.

> anledningen till att de kan ladda hem den (enligt webhotellet) är för att databasen tillåter skrivning

Så får man väl ändå hoppas att de inte uttryckte sig. Läs-/skrivrättigheter hanteras av Windows. Ner-/uppladdningrättigheter hanteras av IIS:en. Det är helt olika saker.

Permalänk: https://www.webforum.nu/p/1219710

## #37 — jvc_man, 2003-12-02T20:59Z

Tjena!

Okey, skall se vad jag kan göra åt det, skall försöka ändra lite på deras kontrollpanel!

Mvh Björn

Permalänk: https://www.webforum.nu/p/1219713

## #38 — jvc_man, 2003-12-02T21:08Z

Det verkar inte gå att fixa...

Deras mail lyder:

\___________________________________________________\_

Det går idag tyvärr inte att göra det.
Om du vill ha skrivrättigeter till din accessdatabas innebär detta även
att du kan ladda hem den.

Det du kan göra är att lösenordsskydda den eller alternativt uppgradera
ditt paket med MS SQL.

Idag erbjuder vi tyvärr inte det billiga enklare mySQL, dock är det
något vi tittar på.

\___________________________________________________\_

Min fråga var hur man stoppar att databasen skall gå att ladda hem...
Försökte som sagt med inställningarna på databasmappen samt på databasen, hjälpte ej...

Vet ni hur man kan göra om man skall ha lösenordsskyddad databas och måste ha lösenordet i in-filen, då kan de få lösenordet också och det é ju inte bra...

OBS: Börjar bli trött på säkerhet, finns så många luckor som ploppar upp hela tiden!

Tacksam för svar och lösning!  =)

Mvh

Permalänk: https://www.webforum.nu/p/1219716

## #39 — aleborg, 2003-12-02T21:11Z

Tycker att du ska kräva att få en mapp som ligger utanför www-rooten där du kan lägga databasen annars tycker jag att du ska fundera på att byta webbhotell, vet dom inte hur man ordnar nått sådant så kan man undra hur deras säkerhet är!

Permalänk: https://www.webforum.nu/p/1219719

## #40 — jvc_man, 2003-12-02T21:20Z

Hej!

Databasmappen ligger utan för wwwroot.
Men detta stoppar inte ex. mig när jag själv letar upp inc-filen i en mapp när hemsidan ligger på servern och därigenom får ut sökvägen till databasen, som jag sedan kan ladda ned...

Men hur funkar det med lösen m.m.
Tacksam för allt tips och trix (ler).

Mvh

Permalänk: https://www.webforum.nu/p/1219723

---

Tråden på webben: https://www.webforum.nu/amne/asp/91362-säkerhet-på-hemsidan-servern/page2  
Föregående sida: https://www.webforum.nu/amne/asp/91362-säkerhet-på-hemsidan-servern.md  
Nästa sida: https://www.webforum.nu/amne/asp/91362-säkerhet-på-hemsidan-servern/page3.md
