Сайт за Имоти

PhrozenCrew каза:
Важна забележка!
Беше отстранен много опасен експлойт.
Един много съвестен приятел ми обърна внимание да сложа малко повече защита в кода. При подаване на заявка от сорта:
Код:
http://ned.freehostia.com/imoti/viewImage.php?type=glimage&name=../../pyt_do_papka/php_file.php

Се получаваше така, че може да се прочете сорс кода на всеки php файл от сайта, съответно могат да се видят паролите, името на базата данни и т.н.. За да променя функцията viewImage и да си защитя кода аз използвах много семпла проверка на пътя до картинката чрез регулярен израз. Вероятно не е най-добрата защита, но тъй като съм фен на Perl използвах следния хак:

Код:
if (preg_match ("/\.jpg$|\.png$|\.gif$/i", $filePath)) {
 $filePath = $filePath;
 }
 else {
 exit;
 }

Много тъпо :) , но за сега работи. Споменах го за да могат и други да се предпазят. Ако откриете и други експлойти ще се радвам да ги споделите и да отстраним заедно проблема.
Големи сте!

И за какво са ти тези излишни глупости ако смея да запитам ?
Нали имаш името на снимката в бд-то.
Даваш директен линк и си готов.Само даваш предпоставка да се хакне.
Така няма смисъл да филтрираш не необходими неща.

Надвам се да съм бил полезен :?:
 
n_alexiev каза:
И за какво са ти тези излишни глупости ако смея да запитам ?
Нали имаш името на снимката в бд-то.
Даваш директен линк и си готов.Само даваш предпоставка да се хакне.
Така няма смисъл да филтрираш не необходими неща.

Надвам се да съм бил полезен :?:

Така си е братче. По лесно от това няма, но точно тук идва проблема, че или трябва да проверявам допълнително базата данни(т.е да;и съществува такова име) или трябва да проверя заявката към нея. Е аз избрах може би по-тъпия вариант с който проверявам заявката, но така не товаря сървара и мисля, че става по-бързо.
Преди малко един пич от форума ми писа, че сайта е увиснал заради прекалено много заявки към базата данни. Е аз мисля, че все пак не съм постъпил лошо. Предполагам за това демо така ще има и по-малко увисвания.
Благодаря ти все пак. Има вероятност и да не съм те разбрал, за което моля да ми простиш, ако искаш пусни някой код тук. аз за днес научих толкова неща за php хаковете, че почти се схванах.
Искам да благодаря искрено и лично :)) на мистър bafitu, той ми показа наистина мега големите грешки, които са опасни за здравето... "Барман дай тука 50 шота.. мдам ,сложи ги пред ей тоя юнак!"
Всички много ми помагате в това начинание. Преди време предложих на някой да пробва Ruby или Python за да направи по-бързо галерия. Мисля, че с такова комюнити от php фенове в тоя велик портал човек може да научи доста.
Сега равосметката. Поправих около 40-60 грешки за няколко часа. Сега ще пипна и грешките от проверката на XHTML и CSS - мисля, че те са най-важните за роботите на google. Пак казвам - Големи сте!
 
Дай някаква структура на базата данни.
таблици - полетa - релации.
 
admin каза:
Дай някаква структура на базата данни.
таблици - полетa - релации.

Админ, предполагам, че искаш да видиш това(използвам 2 простички таблици):

Код:
CREATE TABLE oferti (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
description TEXT NOT NULL,
price DECIMAL(9,2) NOT NULL,
valuta VARCHAR(64) NOT NULL,
oblast VARCHAR(84) NOT NULL,
image VARCHAR(64) NOT NULL,
date DATETIME NOT NULL,
PRIMARY KEY(id)
);

CREATE TABLE image (
id INT NOT NULL AUTO_INCREMENT,
album_id INT NOT NULL,
title VARCHAR(64) NOT NULL,
description TEXT NOT NULL,
type VARCHAR(30) NOT NULL,
image VARCHAR(60) NOT NULL,
thumbnail VARCHAR(60) NOT NULL,
date DATETIME NOT NULL,
PRIMARY KEY(id)
);

Интересно се получи с валидирането на кода по XHTML стандартите. при заявките с амперданси "&" валидацията гърми. Проблема го реших простичко. Нямам достъп до php.ini затова сложих в началото на кода следния ред:
Код:
ini_set('arg_separator.output', '&');

А грешката в CSS се беше получия от една шпация.
 
Това за сепаратора може да го сложиш в htaccess ,но все тая.

За таблиците незнам какво може да промениш освен да промениш типа от int на mediumint с дължина пр. 7-8 (спестяваш 1 байт :D )

Също незнам дали е редно много да слагаш тип char вместо varchar (имат си предимства и недостатъци и затова незнам кое ще е по вярното в случая)

Сега покажи релациите м/у 2те таблици :)
 
bafitu, здрасти пичага
Ако можеш да ме светнеш с един пример от 2 реда какво е релация ще ти покажа точно каквото искаш. Както се сещаш аз не съм програмист и това което цъкам ми е просто тръпка :) . Някой ден може и да се науча, кой знае.
Доколкото схващам с беглите си познания по бази данни (доколкото се сещам MySQL не е база данни, а релационна система за управление на бази данни) ти искаш да ти покажа заявките, които правя към базата данни и най-вероятно в тези заявки са и релациите. Или?

porostorm, датата на добавяне е твърдо фиксирана под текста. Впечатлението, че може би е под картинката идва от нереалните оферти и заради това, че шрифта е друг. Може би трябва да го направя същия като на обявата. Просто използвах флоат лефт за картинката и съм задал определени отстояния в CSS файла. Ще помисля по въпроса при създаването на истинския сайт.
 
Именно - заявките към базата данни.
Трябва да са максимално упростени и по възможност да се сведът до минимум.
 
PhrozenCrew каза:
Код:
CREATE TABLE oferti (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
description TEXT NOT NULL,
price DECIMAL(9,2) NOT NULL,
valuta VARCHAR(64) NOT NULL,
oblast VARCHAR(84) NOT NULL,
image VARCHAR(64) NOT NULL,
date DATETIME NOT NULL,
PRIMARY KEY(id)
);

CREATE TABLE image (
id INT NOT NULL AUTO_INCREMENT,
album_id INT NOT NULL,
title VARCHAR(64) NOT NULL,
description TEXT NOT NULL,
type VARCHAR(30) NOT NULL,
image VARCHAR(60) NOT NULL,
thumbnail VARCHAR(60) NOT NULL,
date DATETIME NOT NULL,
PRIMARY KEY(id)
);


Бих искал да коментираме базата, защото тя е най-важна .
Всичко друго може да оправиш накрая но базата данни не.

Дай някакво инфо за:
1.Какво ще се записва в oblast ?
Ако е някакво местоположение на имота (Варна, София и т.н.)
трябва да се мисли за отделна таблица.
2.Какво е image (от таблицата оферти)и какво ще се записва там?
3.Защо има таблица image и какво ще се записва в тези полета.
Доста са и някой трябва да ги попълни?
4. Мислиш ли за някаква търсачка по някакви критерии и какви ще са те?


Това са само малка част от въпросите но ако нещата се коментират сега
ще си спестиш дни наред проблеми в бъдеще.
 
PhrozenCrew каза:
bafitu, здрасти пичага
Ако можеш да ме светнеш с един пример от 2 реда какво е релация ще ти покажа точно каквото искаш.

Сега го прочетох това.

Значи ....
В момента явно ползваш базата данни за "банка за данни".
Това е грешка която трябва да се оправи точно сега в началото.

Това е и най готината работа която върши базата данни.
Прочети като за начало това:
http://web-tourist.net/forum/viewtopic.php?t=4951

Само за увод ще ти дам пример.

Искаш да направиш сайт за имоти в които да могат да качват оферти само логнати потребители.
Само пример за да схванеш.

Имаш таблица оферти.

пример на първия запис.

id-1
username-PhrozenCrew
tip_oferta - продава
vid - къща
....

грешката тука е на втория ред.
PhrozenCrew е някакъв обект.
Към него има 20-30 атрибута.
-парола
-email
-телефон
-истинското му име
-дата на регистрация
-адрес
.....

Има начин да ги вкараш в тази таблицата но те трябва
да се записват във всяка една оферта.
Във всяка.
това много място и представи си е потребителя иска да си
едитне профила. Само email-a примерно.

таблицата оферти трябва да е

id-1
user_id-1
tip_oferta - продава
vid - 3

таблицата user трябва да е:
user_id-1
name-петър
email......


и след това user_id вече е връзката(релацията) между двете таблици и ти може да ги обединяваш като една.
От две таблици правиш една по дълга.
От 3-4 таблици може да направиш една огромна.
Релациите обикновено са ИД-тата на таблиците.

Прочети оня топик и ще схванеш горе долу.


Представи си още по кофти сценарии.

В този форум примерно и в тази тема.

Топиците са в една таблица (заглавие, текст, автор....)

автора има атрибути (това го разбра) и трябва да е в отделна таблица.

Но този автор може да е модератор някъде.
В определени форуми само.
Форумите са в отделна таблица и също имат атрибути.
име на форума, заключен/отключен, видим/невидим

в коя таблица трябва да запиша някаква информация за да мога после да разбера кой е модератор в форума за php, mysql?

Не мога да го запиша в таблицата на потребителя.
ако там има поле moderator_forum какво да запиша в него?
ми той може да е модератор в още 50 форума.
Не мога да ги запиша в едно поле всичките.
Във таблицата на форумите също не става, защото
всеки форум може да има 50 модератора.

Трябва да направя отделна таблица която да описвам връзките
между тези две таблици.


Трябва да почнеш за да ти се напишат няколко заявки и
ще схванеш.

Примерно направи така, че oblast да е в отделна таблица.
 
Здравейте момчета,

Нямах време да се занимавам с сайта тия дни, но днес следобед го разцъках малко. Ето това са промените, които направих, соред вашите препоръки:
-по идеята на jooorooo:
jooorooo каза:
също една идея. вкараи примерно "едностаен", "двустаен" и тн, да са в различни клетни на таблицата, да речеме във вид на чекове, за да може да се направи по добре работеща търсеща машина. Пример: http://mobile.bg
Толкова подробно инфо е добре да има но за портал. Аз това го замислих за малка фирма, която едвам докарва 5-6 оферти на месец, че и толкова са и много. Иначе търсачка си намерих и сега разучавам кода. Идеята е перфектна jooorooo.
-по идеята на bafitu:
bafitu каза:
при изкарването на броя снимки сложи един два if-a
ако броя е == 1
$snimki = "1 Снимка";
ако броя е > 1
$snimki = "$sum Снимки";
елсе
$snimki = "0 Снимки";
За това не бях се сетил. Реших го така:
Код:
$numImages = (($row['numimage'] > 1) or ($row['numimage'] < 1)) ? $row['numimage'] . ' Снимки' : $row['numimage'] . ' Снимка';
С верния текст под снимката наистина е доста по-цивилизовано :).
-на въпросите на admin:
1.Какво ще се записва в oblast ?
Ако е някакво местоположение на имота (Варна, София и т.н.)
трябва да се мисли за отделна таблица.
2.Какво е image (от таблицата оферти)и какво ще се записва там?
3.Защо има таблица image и какво ще се записва в тези полета.
Доста са и някой трябва да ги попълни?
4. Мислиш ли за някаква търсачка по някакви критерии и какви ще са те?
Мдам, в област се записва местонахождение на имота, повече не е необходимо, за такъв тип сайт. В image се записват всички картинки, разбира се с релации към другата таблица. Най-накрая схванах какво е релация, макар, че съм я ползвал, в случая е нещо от сорта:
Код:
$sql  = "SELECT id, description, name, image, price, valuta, oblast, DATE_FORMAT(date, '%d.%m.%Y') AS date, COUNT(im_album_id) AS numimage
         FROM album al LEFT JOIN image im ON al.id = im.im_album_id
		 GROUP by id
		 ORDER BY name";
Относно търсачката, по-горе писах. Все пак е необходима.
В момента съм сложил в дясно и сортирани областите.
Мисля да пласирам сайта за скромна сума (100-150лв, не повече), така че за сега ще спра разработката на основния сайт, но ще доразвия идеите. За човек който не беше пипвал PHP мисля, че горе-долу се оправих.
Благодаря на всички!
 
значи опитах се да тествам ъплоуда и показва
Warning: Division by zero in /home/www/ned.freehostia.com/imoti/library/functions.php on line 61
Error uploading file
но качих друг файл не картинка ако може да го оправиш
иначе браво добре си се справил :-)
 
Хмм, тоя сайт го бях позабравил, обаче гледам, че някой се спуква да качва тъпотии. Ако напиша IP-то му дали ще се сетите кой е?
 
PhrozenCrew каза:
Хмм, тоя сайт го бях позабравил, обаче гледам, че някой се спуква да качва тъпотии. Ако напиша IP-то му дали ще се сетите кой е?

Да не е някой бот.
Те могат да попълват формуляри.
Прати ми на ЛС ИП адреса/адресите.
 

Back
Горе