Vinnaren i pepparkakshustävlingen!
2015-06-01, 21:13
  #1
Medlem
sandra_ns avatar
Är ny med MySQL och sitter och leker samtidigt som jag funderar över dess säkerhet.

Om man sitter på ett webbhotell så har man inga möjligheter för att joxa med serverconfig, utan får förlita sig på att de sköter säkerheten.

Så hur säkrar man upp känsliga filer? T.ex. php filen med databasconfigen/pass?

Jag testade att lägga dem utanför public_html folder (typ: ../folder_outside_public), men har stora problem och har suttit i timmar nu. Får inte connection med databasen och man verkar inte kunna länka ‘till’ filer. Dock vet jag att det funkar att lägga filer där och använda ‘include’ och ‘include_once’ i php filen som ligger i public då jag testade med:

Hej!<br>
<?php include_once '../skit/hej1.php'; ?> // innehåller <?php echo "Hej 1"; ?>
<br> ...och.. <br>
<?php include('../skit/hej2.php'); ?> // innehåller <?php echo "Hej 2"; ?>
<br>Hej då.

(../skit ligger utanför den publica foldern)
De ‘echo’na i hej1/2 visades, så det fungerar att hämta (enkel) info från en folder utanför public/domainen. Så vad jag vill är att lägga db_connectionfilerna där och hämta dem, men ack... inte sablar connectar den.

db_connection innehåller bara define("HOST"... pass etc.
Innan provade jag att lägga andra ‘känsliga’ filer där också, som function etc. Men.. då fick jag ännu större problem.

Flyttar jag db_connection till public och ändrar om urlerna i de andra filerna så funkar allt ”som är en testinlogning samt enkel SELECT * från en tabel, samt INPUT i samma tabel. Allt funkar.


När jag har filerna utanför så får jag ett konstigt fel som jag inte kan förklara. Om den inte kan connecta till t.ex. databasen så ska man komma till en error sida i den publica foldern (vilket fungerar om alla filer är publica). När jag hade db_connect, function, logout etc. utanför public så länkades error sidan till 404: domain.se/error.php/domain.se/foo/error.php

foo är min testfolder där jag har alla filer och testar med, så den är rätt. Men, det visar klart att servern blir helt förvirrad när den skall hämta fler utanför sin public folder. Har sett över alla urler till error sidan, och de är korrekta.

Några tips till en helt förvirrar flicka som sliter sitt hår...

- Vill kunna ha mina configfiler utanför den publica foldern. (som hej1/2 i min test),
- Om det inte går, så bara en fil med min DB_PASS, DB_USER etc.
- Andra tips på hur man kan säkra upp känsliga conf-filer?
Citera
2015-06-01, 21:29
  #2
Medlem
Diverges avatar
Förstår hur du tänker men frågan är om du inte komplicerar det.
Har du problem att ansluta till filer utanför dina public-folder är det säkert inte meningen att du ska göra det.

Stryp access till din db.inc via .htaccess eller kanske ännu hellre att du lagrar lösen i en db.php-fil.
Därmed om din .htaccess skulle raderas/sluta funkar/whatever kan filen visas i browsern, men du är ju naturligtvis inte dum att skriva ut variablerna
Citera
2015-06-01, 21:31
  #3
Medlem
Diverges avatar
Se till att din mySQL bara lyssnar på 127.0.0.1 också så begränsar du ytterligare möjligheten för nån att komma in om dom mot förmodan hittar usr/lösen.
Citera
2015-06-01, 21:53
  #4
Medlem
sandra_ns avatar
Om det kommer ner bara till en enda fil som jag kan skydda så är det min datbascofigfil (har provat olika setuper, men så här ser den ut

dbconnection.php
<?php
define("HOST", ”url_till_mysqlserver”);
define("USER", ”user”);
define("PASSWORD", ”pass”);
define("DATABASE", ”databas”);
?>

...och är den som jag vill skydda. Gärna andra config samt function filer också, men om det strular så förbannat...

Jag är ju begränsad över vad jag kan ställa in på servern/access etc. då allt ligger på ett webbhotell.
Att ställa in MySQL servern att bara lyssna på localhost kan jag inte. Så det skiter sig..
Citera
2015-06-01, 21:57
  #5
Medlem
Diverges avatar
Citat:
Ursprungligen postat av sandra_n
Om det kommer ner bara till en enda fil som jag kan skydda så är det min datbascofigfil (har provat olika setuper, men så här ser den ut

dbconnection.php
<?php
define("HOST", ”url_till_mysqlserver”);
define("USER", ”user”);
define("PASSWORD", ”pass”);
define("DATABASE", ”databas”);
?>

...och är den som jag vill skydda. Gärna andra config samt function filer också, men om det strular så förbannat...

Jag är ju begränsad över vad jag kan ställa in på servern/access etc. då allt ligger på ett webbhotell.
Att ställa in MySQL servern att bara lyssna på localhost kan jag inte. Så det skiter sig..

Då borde typ följande i din .htacess göra susen
<Files dbconnection.php>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>

Ok. Du kommer åt den externt alltså? Borde du kunna be hotellet strypa.
Citera
2015-06-01, 23:05
  #6
Medlem
sandra_ns avatar
Nja... både ja och nej att man kommer åt filen.

Du når dbconnection.php från utsidan, men "ser" inte innehållet.

Kör man en wget på filen ansluter den, men hämtar en tom fil:
Kod:
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'dbconnect.php'

    [ <=>          ] 0           --.-K/s   in 0s      

2015-06-01 04:41:13 (0.00 B/s) - 'dbconnect.php' saved [0]


Kör jag en wget t.ex. på en wordpresssida (wp-config.php) som jag hanterar så kommer jag inte åt den:
Kod:
HTTP request sent, awaiting response... 403 Forbidden
2015-06-01 04:38:38 ERROR 403: Forbidden.

...
(efter lite tid...)
...

Kollade .htaccess på wordpressen (där jag kör med wp-security, 5G etc.):

<Files wp-config.php>
order allow,deny
deny from all
</Files>

Så... det ger nog svaret där som du sa..
Men filen innehåller 139 rader.. så det är att sitta och gotta sig med att kolla i den. (Dumma peka och klicka system... )..


Aja.. bra att sitte å bolla problem. då löser sig del för del.

Men finns fler tips på säkra upp filer, databaser så.
Citera
2015-06-02, 08:14
  #7
Medlem
Om programmet INTE funkar utan filen, så är det lämpligt att använda require_once och skippa include_once.
rekommendera dig att läsa på om skillnaden mellan require och include om du inte vet..

Vad jag misstänker är att du har fel rättigheter på vissa av dina filer, och dessa kan du inte inkludera.

Om det funkar//har funkat på 1 fil så skall det funka på andra..

annat tips: Lär dig titta på apache loggen eller var dina "PHP error messages" hamnar.
Citera
2015-06-02, 15:13
  #8
Medlem
sandra_ns avatar
Ok.. skall då ta och svara på mitt eget problem..

Det går att ha config filer utanför den publica foldern. Gjorde en helt ny testsida, och det funkar. Hittar dock inte vad jag gjorde för fel innan. :/



De loggar som webbhotellet ger tillgång till är inte mycket att hänga i julgranen. Livet vore nästan bättre utan!
Läser på om 'requireX'. Tacka för tipset!
Citera
2015-06-09, 22:41
  #9
Medlem
FreedomFighter-s avatar
Beroende på vilken host du använder så brukar detta funka

Kod:
chmod 600 wp-config.php

Detta gör att filen endast är läs- och skrivbar av användaren till kontot. Men det beror som sagt på vilken host du använder samt hur dem satt upp systemet.

Observera att detta endast fungerar på Linux.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback