Just nu i M3-nätverket
Gå till innehåll
Ringbom

MySql, ASP och hackad sida

Rekommendera Poster

Hej

jag tänkte bara fråga om någon skulle vilja hjälpa mig med min sida som blev hackad inatt. Den är visserligen uppe nu men fick stränga order om att "täppa till hålen" vilket är lättare sagt än gjort när man inte är någon utvecklare. Jag kör med klassisk asp och har en mysql-databas. Mina besökare kan inte skriva in något, har tom tagit bort gästboken och searchfunktionen. Så nu kan de endast läsa. Ända blev den hackad. Hur skulle ni ha ändrat det här koden för att den ska bli säker? 
Hoppas på possitivt svar.

Dim bokstav
	bokstav = Request.QueryString("bokstav") 

Set Connect = server.createobject("ADODB.connection")
Connect.Open Session("Connection_String")
Set RecSet = Connect.Execute("SELECT * FROM tabellnamn WHERE tabellnamn.fnamn LIKE '" & Request.QueryString("bokstav") & "%' order by tabellnamn.fnamn, tabellnamn.enamn asc")

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Din kod är vidöppen för hackare. Du använder querystring() utan att kolla vad den innehåller.

Innan du använder den, bör rensa bort först och främst tecknet ' sedan kolla så att den inte innehåller någon SQL-kod.

 

Googla på "SQL-injection" så får du massa bra tips!

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag har googlat och läst hela natten, inte sovit någonting. Det är därför jag skriver här för att få kod-tips. 

Jag kan betala en slant för den som hjälper mig. Hade en annan attack för några år sedan och försökte få hjälp då med, men hittade ingen som kunde tyvärr. Jag är ingen utvecklare utan gillar bara att skriva om historia :)

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ok, jag hinner tyvärr inte skriva kod åt dig just nu, så kanske nån annan kan hjälpa till. I morgon eftermiddag har jag dock tid.

 

Men jag behöver veta vad du förväntar dig att querystring() ska innehålla. 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

hinner ingen före tar jag tacksamt emot hjälp imorgon. 

jag har en gigantisk stor hemsida med just nu 17 asp-sidor som behöver ändras kod i. Men om du hjälper mig med en sida så kan jag säkert klura ut hur de andra ska se ut. 

T.ex. på en sida ska jag plocka ut alla personer som är födda på 1400-talet och sedan sortera på dödsår, namn, yrke, dödsålder. 

https://www.historiesajten.se/artaldod.asp?siffra=14

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Eftersom querystring parametern heter bokstav så utgår jag ifrån att den bara kan innehålla en bokstav. Då bör väl enklast möjliga lösning vara 

bokstav = Left(Request.QueryString("bokstav"), 1)

På så vis så kan man bara ange en bokstav, ingenting mer. Försöker en hackare ange styrtecken för sql, så bör det inte spela så stor roll då resten av deras hack-kod inte kommer komma med.

 

Hoppas att ni ursäktar lite, har inte kodat klassisk asp på flera, flera år. Men detta bör nog öka säkerheten en bit, men jag är osäker på exakt hur det var man gjorde

Set RS = server.createobject("ADODB.Recordset")
Set cmd = server.createobject("ADODB.Command")

cmd.ActiveConnection = Conn
cmd.CommandText = "SELECT * FROM tabellnamn WHERE tabellnamn.fnamn LIKE @bokstav order by tabellnamn.fnamn, tabellnamn.enamn asc"
cmd.CommandType = adCmdText
cmd.CommandTimeout = 900 

set param = cmd1.CreateParameter("@bokstav", 200, 1, 200, bokstav & "%")
cmd.Parameters.Append param

' Execute the query for readonly
RS.CursorLocation = adUseClient
RS.Open cmd, , adOpenForwardOnly, adLockReadOnly

Om jag gjort rätt, så kommer du få en så kallad parameteriserad query. Det betyder att databasen kommer hjälpa till med att hantera vissa av de styrtecken osv som hackare använder sig av vid sql-injection. Men jag är inte helt säker på att det är ett 100%igt skydd, du måste fortfarande kontrollera att det du får in som parametrar är det du förväntar dig få in.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
20 minuter sedan, skrev .M:

 

Tack för att du försöker hjälpa mig! 

jag har suttit en stund nu och försökt få in det du skrev men det blir fel hela tiden. Den klagar bl.a. på 

Kompileringsfel i Microsoft VBScript error '800a0408'

Ogiltigt tecken

Set RecSet = server.createobject(ADODB.Recordset)?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

Nu fick jag

Körningsfel i Microsoft VBScript error '800a01a8'

Objekt krävs.: ''

/nina/historia/fornamn.asp, line 104

 

<%
'************* Databaskoppling *********** 
Dim bokstav
	bokstav = Left(Request.QueryString("bokstav"), 1)
set param = cmd1.CreateParameter("@bokstav", 200, 1, 200, bokstav & "%")	
Set Connect = server.createobject("ADODB.connection")
Connect.Open Session("Connection_String")
Set cmd = server.createobject("ADODB.Command")

cmd.ActiveConnection = Conn
cmd.CommandText = "SELECT * FROM tabellen WHERE tabellen.fnamn LIKE @bokstav order by tabellen.fnamn, tabellen.enamn asc"
cmd.CommandType = adCmdText
cmd.CommandTimeout = 900 

cmd.Parameters.Append param

' Execute the query for readonly
RecSet.CursorLocation = adUseClient
RecSet.Open cmd, , adOpenForwardOnly, adLockReadOnly

 

Redigerad av Ringbom
felskrivning

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Antagligen för att du försöker skapa parametern från cmd1 objektet som jag misstänker inte finns. Du måste nog skapa parametern efter du skapat cmd objektet.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

Ändrade lite och fick nu "Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt."

 

Dim bokstav
	bokstav = Left(Request.QueryString("bokstav"), 1)
	
Set Connect = server.createobject("ADODB.connection")
Connect.Open Session("Connection_String")
Set cmd = server.createobject("ADODB.Command")

cmd.CommandText = "SELECT * FROM tabellen WHERE tabellen.fnamn LIKE @bokstav order by tabellen.fnamn, tabellen.enamn asc"
cmd.CommandType = adCmdText
cmd.CommandTimeout = 900 

set param = cmd1.CreateParameter("@bokstav", 200, 1, 200, bokstav & "%")
cmd.Parameters.Append param

' Execute the query for readonly
RecSet.CursorLocation = adUseClient
RecSet.Open cmd, , adOpenForwardOnly, adLockReadOnly

 

Redigerad av Ringbom
felskrivning

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Prova att byta

LIKE @bokstav

till

LIKE ?

och se om det hjälper.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

nej det hjälpte inte

"Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt."

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag undrar om någon känner någon som jag kan anlita för att få hjälp? Jag måste fixa detta så inte min sajt stängs ner igen. Räcker eg. med att någon hjälper mig med en fil så kopplar jag nog sedan hur jag ska göra/tänka.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Problemet är att klassisk asp är nästintill helt dött. Jag försökte klura ut hur man får igång det igen på min dator, men misslyckades. De flesta av oss som faktiskt utvecklade i klassisk asp en gång i tiden har nog gått vidare till andra saker, främst .NET. Själv har jag inte kodat någon server-side på tre-fyra år, ingen klassisk asp på säkert tio år. Så allt jag försökte föreslå kommer ifrån minnet.

 

Ett annat bekymmer är att du av någon anledning får felmeddelanden på svenska, det gör det väldigt svårt att söka på då 99,8% av all dokuementation är på engelska. Men vad fick du får svar när du sökte på felmeddelandet?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jo jag vet att det är gammal kodspråk men jag har byggt upp den här sidan under 15 år och det känns övermäktigt att koda om alla sidor jag har, helst när jag vet att det är 1000-tals besökare om dagen på sajten. Jäkligt poppis i skolorna.
 

https://www.historiesajten.se/artaldod.asp?siffra=14

Om man sätter en fnutt 'efter 14 i den här länken får man meddelanden på engelska. Bara där avslöjar den ju databas och allt. Kan man på något sätt dölja det?

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-5.7.25-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' order by historia.dod, historia.enamn asc' at line 1

Sitter på jobbet nu och kommer inte åt min databas eller filer just nu

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Har du en web.config bland dina filer? Om du har det kontroller att dina inställningar matchar dessa

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
    <httpErrors errorMode="DetailedLocalOnly" />
    <asp scriptErrorSentToBrowser="false"/>
</system.webServer>
</configuration

Om du inte har det, lägg en fil i roten av din site och döp den web.config och lägg ovanstående i. Det kan eventuellt lösa bekymret med att du berättar vad som går fel.

 

När du läser in en parameter som är ett tal, gör en CInt på den, exempelvis

nummer = CInt(Request.QueryString("siffra"))

Det bör förhindra att annat än bara siffror kommer in, men jag är osäker på vad som händer om man försöler ange något annat än bara siffror.

 

Likadant för den tidigare parametern vi pratat om. Om det bara är en bokstav, gör en Left("", 1) på den och se till att det bara är en bokstav som kommer in. Du kan även göra if på Instr(Request.Querystring("parameter"), "'") > 0 då innehåller det ett tecken som inte borde få komma med, då kan du avbryta körning av sql-fråga.

 

Om dina besökare ändå inte ska få ändra databasen, skapa en ny användare i mysql som bara har läsrättigheter, inga rättigheter att skriva eller ändra i databasen alls och ändra din connection string att använda denna användare. På så vis har du en helt skrivskyddad databas och hackare kommer inte kunna lägga till fulheter eller så.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jättetack för alla tips 😊

ska testa när jag kommer hem från jobbet. 

Har fått lite input från jobbarkompisar också så förhoppningsvis kommer jag fixa det här. 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag har en web.config som ser ut så här,  och när jag ändrade till 

<httpErrors errorMode="DetailedLocalOnly" />

så försvann sajten från nätet tills jag ändrade tillbaka igen :/

 

<configuration>
     <system.web>
       <customErrors mode="Off" />
     </system.web> 
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Redirect to https" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
        <httpErrors errorMode="Detailed" /> 
    </system.webServer>
</configuration>

så det gick inte bra

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
12 timmar sedan, skrev Ringbom:

Jo jag vet att det är gammal kodspråk men jag har byggt upp den här sidan under 15 år och det känns övermäktigt att koda om alla sidor jag har, helst när jag vet att det är 1000-tals besökare om dagen på sajten.

Du har inte funderat på att gå över till Wordpress för att slippa så mycket kodande?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Nej jag gillar samtidigt att koda och bygga design och sånt. Fast det bästa är ju förstås att skriva och lägga in artiklar. Kollade på wordpress för ett antal år sedan men det verkade bara krånglig, jag vill ha koll på koden. Håller på och ändrar nu så det ska bli säkert, fått hjälp av mina duktiga jobbarkompisar :)

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Fast om du skulle byta till Wordpress exempelvis så skulle du kunna fokusera mer på design och innehåll än exempelvis jobbiga säkerhetshål då Wordpressutvecklarna fokuserar på den biten åt dig.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×