Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Portal - Kilka pytań
Forum PHP.pl > Forum > Przedszkole
desavil
Witam serdecznie!
Za klika tygodni zabieram się do pisania pewnego portalu społecznościowego. W związku z tym mam kilka pytań.

1. Zapisywanie danych osobowych w bazie danych - Czy szyfrować dane, które użytkownicy zapisują w swoim profilu? Czy jest to wydajne?
PS. Proszę o swoje sugestie.

2. Szyfrowanie - Do tej pory pisząc skrypty stosuję napisany przez siebie skrypt mianowicie. Każdą zmienną $_POST, $_GET przed wywołaniem 'oczyszczam' za pomocą napisanej przez siebie funkcji. Polega to na usunięciu znaków szkodzących kodowi, pozwalając na wgranie czegoś do plików strony itd. Czy jest to konieczne, bezpieczne i wydajne?
PS. Proszę o swoje sugestie, czym ewentualnie to zastąpić.

3. Znajomość - W jaki sposób zapisywać znajomości, powiązania w bazie danych?
- Czy też przy każdym użytkowniku robić kolumnę 'znajomi' i w niej zapisywać ID użytkowników zaproszonych (1;2;3;4;5)
- Zrobić tabelę znajomi i tam zapisywać ID użytkownika oraz jego znajomych w takiej postaci '1;2;3;4;5'
- Każdy znajomy w osobnym wierszu, czyli ID osoby głównej i ID znajomego.
PS. Jakie rozwiązanie było by najkorzystniejsze i najbardziej wydajne. Proszę o własne sugestie, jak Wyłyście postąpili.

4. Zauważyłem, że większość portali ma kilka domen np.
- Znany portal facebook ma adresy takie: photos-f.ak.fbcdn.net - zdjęcia
- NK: 0.s-nk.pl
I moje pytanie brzmi następująco po co osobna domena na pliki strony, zdjęcia??
Przecież można to zrobić za pomocą sub-domen i przypisać każdą dla osobnego serwera, a nawet ustalić dla każdej sub-domeny własne adresy DNS. Można to przecież zrobić w taki sposób: domena.pl - portal, 1.s.domena.pl, 2.s.domena.pl, 3.s.domena.pl ... - serwery na pliki

5. Kod - Nie dotyczy to tylko portali, ale również zwykłych stron. Dlaczego (dotyczy się to głównie, ajax, javascript, jQuery, css) kod jest w jednej lini - Aby go trudniej ewentualnie skopiować i przerabiać? Jakimi programami to można zrobić? (jak się da w notepad++ gdzie to jest?).

6. Adresy - Czy stosować linki typu:
- domena.pl/register , domena.pl/user/12345
- domena.pl/register.html , domena.pl/user,12345.html
- domena.pl/register , domena.pl/user,12345
Czy jakieś inne - zaproponujcie

7. Jak mi się coś przypomni to dopiszę blinksmiley.gif

Pozdrawiam serdecznie i Życzę WESOŁYCH ŚWIĄT! cool.gif
cycofiasz
Odpowiem tak jak na chwilę obecną chwilę uważam smile.gif Jeśli ktoś będzie miał inne poglądy to chętnie je poznam.

1. Nie szyfrować, spadnie wówczas wydajność przetwarzania danych i wyszukiwania.

2. Masz raczej na myśli filtrowanie - trzeba wiedzieć kiedy filtrować i jak filtrować. Jeśli dane będą zapisane w bazie danych to warto zainteresować się PDO -> prepared statements , wówczas separujemy dane od sql i ryzyko ataku SQL Injection jest nikłe. Jeśli chodzi o unieszkodliwianie znaczników html to można zrobić to przed zapisem do bazy, wówczas nie ma potrzeby filtrowania danych przy odczycie z bazy. Jeśli funkcja którą stworzyłeś jest wystarczająco dobra to oczywiście możesz jej używać nadal.

3. Stworzenie tabeli znajomi gdzie każda znajomość dwóch userów = 1 rekord.

4. Tutaj sam chętnie poznam odpowiedź na to pytanie winksmiley.jpg być może chodzi o niewysyłanie cookies dla statycznych treści (optymailizacja)

5. Minimalizują kod po to by zmniejszyć jego wagę (optymalizacja), być może też niektórzy stosują to by zaciemnić kod przed jego skopiowaniem / rozgryzieniem działania. Można tego dokonać nawet przez serwisy www (szukaj JS Minifier itp)

6. Wg mnie wersja "domena.pl/user/12345" jest najbardziej czytelna
tehaha
1. szyfrujesz tylko hasła.
2. jest pewna zasada "nigdy nie ufaj użytkownikowi", wszystko co pochodzi od użytkownika musi być filtrowane, nie wiem co masz na myśli przez "szyfrowanie"
3. tabela z powiązanie znajomości
4. to już kwestia indywidualna......a czemu nie? skoro mają oddzielne serwery na pliki to po co dawać na tą samą domenę?
5. pewnie tak, jakby nie patrzeć skrypt ajax/jquery można łatwo ukraść, co do wydajności to wątpię, żeby to znacząco ją zwiększało, no chyba, że skrypt jest bardzo długi
6. też kwestia indywidualna, zrób tak jak Ci się podoba
Mephistofeles
Przede wszystkim wykorzystaj jakiś framework, workflow wzrośnie smile.gif. Ja polecam Symfony 2 (obecnie na etapie testowym, ale podejrzewam, że niewiele w kwestii nazewnictwa się zmieni)
1 i 2. Nie szyfruj, zadbaj tylko o bezpieczeństwo - SQL Injection itd.
3. Relacja wiele do wielu - dochodzi dodatkowa tabela (user - user)
4. Z tymi domenami chodzi o obejście limitu HTTP - 2 żądania na jeden adres, dlatego do statycznych elementów stosuje się inną domenę.
5. Bo tak jest teoretycznie szybciej, do tego kompresja i masz mniejszy plik (który i tak jest cache'owany, ale to już inna kwestia).
6. Przy dobrym frameworku wymiana routingu to chwila (no może dłuższa, ale jednak chwila).

Aaa, jeszcze jedno. Haseł się nie szyfruje. Hashowanie to operacja w jedną stronę, szyfrowanie można odwrócić.
desavil
Bardzo Wam wszystkim dziękuję za odpowiedzi, które mi pomogą smile.gif

W kwestii wyjaśnienia co do punktu 2:
Dane są oczyszczane, czyli wszelkie dane, które może przesłać użytkownik na stronę są oczyszczane funkcją prostą, którą sobie napisałem mianowicie usuwany jest kod html, znaki " ' oraz inne niebezpieczne, dane.

Jeżeli tak oczyszczam dane przesyłane wszelkie to chyba niema mowy o włamaniu?

PS. Jeszcze jedna sprawa o której zapomniałem dotyczy ona Backupu bazy danych.
Jak go tak naprawdę robić? Przy dużej liczbie użytkowników, którzy cały czas coś dodają wykorzystanie bazy cały czas jest bez przerwy.
Więc dajmy na to ktoś się zarejestruje jego dane są dodawane do 3 tabel i backup wykona się jak doda się on akurat tylko do 1 tabeli. ...i co wtedy wielka klapa bo profil uszkodzony.

Jak sądzicie jak to robią znane portale - ile może ważyć dajmy na to baza danych NK czy Facebook
Mephistofeles
Od tego są transakcje, żeby zabezpieczyć przed taką ewentualnością. A baza może ważyć duuużo, szczególnie Facebooka, chociaż ile dokładnie to Ci nikt nie powie, można tylko przypuszczać po ilości serwerów.
desavil
Mógłbyś bardziej opisać te transakcje bazy danych: jakieś linki czy coś bo google mi odmawia pomocy oraz ten cały framework i symphon do czego to jest? sad.gif

smile.gif
Mephistofeles
http://pl.wikipedia.org/wiki/Framework
http://www.symfony-project.org/jobeet/1_4/Doctrine/en/ - symfony, od razu fajny tutorial
http://www.symfony-reloaded.org - Symfony 2
http://dev.mysql.com/doc/refman/5.0/en/commit.html - transakcje, prosto z manuala MySQLa
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.