Avatar billede amews_aj Nybegynder
27. februar 2006 - 21:25 Der er 31 kommentarer og
1 løsning

Sikker mysql connection?

I php når man forbinder til en mysql, skriver man jo bare det hele i php filen:

mysql_connect("host", "bruger", "kode");

Gør man også bare det i C#. Jeg ved hvordan, men kan folk ikke få fat i ens kode, hvis den bare står sådan? Eller kan man ikke det når det er compiled. Man kan ikke decompile?

Indtil nu har jeg i C# bare frit skrevet:
new MySqlConnection("Database=database;Data Source=host;User Id=bruger;Password=kode");

Er det sikkert, eller ej? Skal det skjules på nogen måde?
Avatar billede ladyhawke Novice
27. februar 2006 - 21:34 #1
Du kan gemme oplysningerne krypteret i f.eks. web.config og indlæse den derfra...
Avatar billede amews_aj Nybegynder
27. februar 2006 - 21:37 #2
Øh, kan du uddybe det lidt?

Betyder det, at sådan som jeg gør det nu, ikke er sikkert?
Avatar billede arne_v Ekspert
27. februar 2006 - 21:37 #3
det er sikkert mod web brugerne da de kun kan faa output fra din .aspx
og ikke hverken dll'er eller source code

det er ikke sikkert mod system administrator paa din web server

jeg mener at PHP's login protokol beskytter mod netvaerks snifning hvis
web server og database server er 2 forskellige boxe

bottom line: no problem
Avatar billede amews_aj Nybegynder
27. februar 2006 - 21:37 #4
Hvad med i php, der er vel ikke noget problem der?
Avatar billede amews_aj Nybegynder
27. februar 2006 - 21:38 #5
Ok, så arne_v, du mener at det er sikkert (Både php og C#)
Man skal altså ikek skjule eller hvad?
Avatar billede arne_v Ekspert
27. februar 2006 - 21:53 #6
PHP er det samme

web brugerne kan ikke se det

web server administrator kan se det

hvis web server administrator er dig => ikke noget problem

hvis web server administrator er en som du har tillid til => ikke noget problem

hvis web server administrator er en som du ikke har tillid til => find en anden server
Avatar billede amews_aj Nybegynder
27. februar 2006 - 21:58 #7
Har min side ved unoeuro.com :P
Det går nok næppe ind og lurer folks koder :P

Men hvis jeg laver et C# program, som andre installerer, kan de så på en måde decompile, eller et eller andet, og derved få fat i min kode, eller kan det ikke lade sig gøre?

Den skal ikke skjules på nogen måde?
Avatar billede arne_v Ekspert
27. februar 2006 - 21:59 #8
ja

.NET kode er nemt at decompile

kig paa obfuscatorer (der findes flere forskellig eprodukter til .NET)
Avatar billede arne_v Ekspert
27. februar 2006 - 21:59 #9
du kan ogsaa soege lidt her - emnet har vaeret oppe nogle gange
Avatar billede amews_aj Nybegynder
27. februar 2006 - 22:04 #10
ok, så min connect skal, I C# krypteres?, I php intet?

Kan du forklare hvordan?
Avatar billede arne_v Ekspert
27. februar 2006 - 22:12 #11
obfuskeres - det er ikke helt det samme som krypteres

faktisk vil man nok typisk kryptere passwordet og saa obfuskere koden der dekrypterer

men det er altsaa ikke en 100% sikker metode - det holder ikke 30 minutter
mod en kyndig person

da PHP skal fortolkes saa er mulighederne ret begraensese i PHP
Avatar billede ladyhawke Novice
27. februar 2006 - 22:13 #12
søg på cryptography/C# på msdn.com eller i Visual Studio hjælpen, der er kodeeksempler på kryptering
Avatar billede amews_aj Nybegynder
27. februar 2006 - 22:15 #13
Ok, kan man sikre det helt på nogen måde?
Er MSSQL bedre end MYSQL, altså på det her punkt?

Hvordan bruger man ellers databaserne (primært MySQL), man må da kunne gøre det sikkert? Ellers er det jo ikke ligefrem rart at have med at gøre...

(Forresten, kræver brug af MSSQL databaser ikke, at brugeren af programmet har MSSQL installeret, eller er selve .mdf filen nok i sig selv?)
Avatar billede arne_v Ekspert
27. februar 2006 - 22:21 #14
man anser det normalt for praktisk umuligt at sikre noget mod nogen som har
fuld adgang

da din db vel ogsaa ligger paa web hotel og de har fuld server adgang til
db ogsaa, saa er web hoteller naeppe specielt interesseret i dit password

Mig bekendt er problem stillingen for SQLServer med SQLServer security den
samme.

Men SQLServer kan koeres med Windows security (alias integrated security) og saa
er der ikke noget password i koden overhovedet.

SQLServer er ligesom MySQL:

client app (f.eks. en web side)----------database server--------database fil
Avatar billede amews_aj Nybegynder
27. februar 2006 - 22:24 #15
" vel ogsaa ligger paa web hotel og de har fuld server adgang til
db ogsaa, saa er web hoteller naeppe specielt interesseret i dit password"
->
Nej men hvis jeg udvikler programmer til brugere, koblet op på en MySQL database, så skal de jo ikke kunne få fat i min kode, kan jeg ikke undgå 99,99999 % at det kan lade sig gøre?
Avatar billede arne_v Ekspert
27. februar 2006 - 22:37 #16
du skal vaelge:
1) lade passwordet i dine brugeres app kun give adgang til deres egne data
2) kun lave app til paalidelige brugere
3) lade dine brugeres app snakke med en web service paa en paalidelig server
  (hvor passwordet saa ligger)
Avatar billede amews_aj Nybegynder
28. februar 2006 - 09:50 #17
Kan du forklare det lidt nærmere? Forstår ikke helt punkt 3.
Avatar billede arne_v Ekspert
28. februar 2006 - 13:51 #18
bruger app/bruger PC-----(web service kald)----din webservice/din sikre server----(db kald)----database
Avatar billede amews_aj Nybegynder
28. februar 2006 - 13:58 #19
Er jeg ikke nødt til at connecte fra selve programmet? Koden er da nødt til at stå i programmet?
Avatar billede arne_v Ekspert
28. februar 2006 - 14:09 #20
database passwordet er i web serviuce koden paa den sikre server
Avatar billede clausc Nybegynder
28. februar 2006 - 14:14 #21
arne_v: "man anser det normalt for praktisk umuligt at sikre noget mod nogen som har
fuld adgang"

Det er ikke rigtigt. Det er praktisk muligt - men dyrt! Dyrt fordi det kræver (tamper-resistant) hardware.
Avatar billede amews_aj Nybegynder
28. februar 2006 - 15:57 #22
arne_v > Beklager men jeg forstår stadig ikke helt... (Hvor er koden siger du)

Webservice.. :S ?
Sikre server.. :S ?
Avatar billede arne_v Ekspert
01. marts 2006 - 00:26 #23
kan man have fuld kontrol over noget tamper resistant ?
Avatar billede arne_v Ekspert
01. marts 2006 - 00:27 #24
webservice kan du finde masser af info om

sikre server er en server hvor dem du mistaenker for at ville hapse database
kodeordet ikke har adgang til webservice koden men kun til at kalde den
Avatar billede clausc Nybegynder
01. marts 2006 - 09:20 #25
arne_v: i det konkrete tilfælde skal der under alle omstændigheder sendes et password til databasen, så her gi'r hw ikke så meget mening. Man kunne gemme et krypteret password i app.config og nøglen i Windows' key-store.

Men i tilfælde hvor hverken nøgler eller data må findes i klartekst selv ikke i maskinens ram, så kan hw hjælpe.
Avatar billede amews_aj Nybegynder
01. marts 2006 - 09:58 #26
Kan I give et konkret eksempel..?
Avatar billede arne_v Ekspert
01. marts 2006 - 14:44 #27
jeg har ikke en web service eksempel men kun et normal web request eksempel
og i VB.NET og ikke i C#

Imports System
Imports System.IO
Imports System.Net
Imports System.Text

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim req As HttpWebRequest = CType(WebRequest.Create("http://localhost/select.aspx"), HttpWebRequest)
        Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
        Dim stmrdr As StreamReader = New StreamReader(resp.GetResponseStream)
        Dim line = stmrdr.ReadLine
        While line <> Nothing
            Dim parts = line.Split(" ".ToCharArray)
            Dim f1 As String = parts(0)
            Dim f2 As String = parts(1)
            Console.WriteLine(f1 & " " & f2)
            line = stmrdr.ReadLine
        End While
        stmrdr.Close
        resp.Close
    End Sub
End Class

og

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%
    Response.ContentType = "text/plain"
    Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=")
    con.Open
    Dim cmd As OleDbCommand = New OleDbCommand ("SELECT * FROM T1", con)
    Dim rdr As OleDbDataReader = cmd.ExecuteReader
    While rdr.Read
        Dim f1 As Integer = CType(rdr(0), Integer)
        Dim f2 As String = CType(rdr(1), String)
        Response.Write(f1 & " " & f2 & Environment.NewLine)
    End While
    con.Close
%>

koden er ikke nogen pryd for oejet men pointen er bare at database connection laves
i noget kode som er paa web serveren og ikke i den exe som brugeren har
Avatar billede amews_aj Nybegynder
01. marts 2006 - 21:45 #28
Der indtaster du jo også bruger og pass...
Avatar billede arne_v Ekspert
01. marts 2006 - 21:52 #29
ja

men det ligger paa en server ikke i den client app som ligger ude paa
brugernes PC'ere

(loesningen er ikke relevant for web apps)
Avatar billede amews_aj Nybegynder
02. marts 2006 - 09:57 #30
Må desværre sige at jeg slet ikke er med...

Den kode der, er det ikke selve applikationen, eller ligger det på en server et sted, eller hvordan fungere det?
Avatar billede amews_aj Nybegynder
09. marts 2006 - 18:51 #31
Jeg holder mig til arne_v's kommentar:

Kommentar: arne_v
27/02-2006 22:37:26

Smid et svar
Avatar billede arne_v Ekspert
09. marts 2006 - 19:01 #32
ok
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