[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: помогите с архитектурой БД + несколько вопросов по
katok
1)какой функцией фильтровать get/post запросы от sql inj. и xss?
только mysql_escape_string() для этого достаточно?

2)как защититься от подмены get/post запросов?

3)как защититься от кражи сессии?

4)почему некоторые программисты хранят сессии в БД mysql, это безопаснее или так быстрее работает?

5)какая команда нужна, что вся БД mysql была в utf-8?

6)можно ли несколько покупок продать одним кликом в paypal? т.е. в корзине на моем
сайте несколько товаров, юзер нажимает одну кнопку buy now и попадает на paypal.com
для оплаты?(ссылку на пример рабочии, если не трудно)

7)можно ли проверить php скриптом оплату товара пользователем?(ссылку на пример рабочии, если не трудно)



8)Правильно ли я выбрал типы полей для своей БД? Можно ли эту БД как-то упростить?

CATEGORY:
cat_id(smallint),
item_name(tinytext)

ITEMS:
item_id(smallint),
cat_id(smallint),
title(tinytext),
description(text),
in_stock(tinyint(2). takes 2 values: 1 or 0),
image_id(tinyint),
add_date(datetime),
hide(tinyint(2). takes 2 values: 1 or 0),
price(mediumint)

IMAGES:
image_id(smallint),
item_id(smallint),
image_link(text)

USERS:
user_id(smallint),
name(tinytext),
surname(tinytext),
phone(tinyint),
mobile_ph(tinyint),
email(tinytext),
address(text),
ip(tinyint)

ORDERS:
order_id(smallint),
user_id(smallint),
item_id(smallint),
qty(smallint),
status(tinytext. takes 2 valus: waiting or approved),
add_date(datetime),
currency(tinytext. takes 3 values: euro, pounds, US dollars),
total_price(int),
income(int),
approved(datetime)

ADMIN:
admin_id(smallint),
name(tinytext),
password(tinytext),
last_visit(datetime)


9)Как правильно хранить ссылки на картинки в БД? Записать все ссылки в одну строку т.е. вот так:

image_id, item_id, image_link
1, ............1, ......... www.site.ru/image1.jpg
.............................. www.site.ru/image2.jpg
...............................www.site.ru/image3.jpg
...............................www.site.ru/image4.jpg
2, .............2,...........www.site.ru/image5.jpg
.............................. www.site.ru/image6.jpg
...............................www.site.ru/image7.jpg
................................www.site.ru/image8.jpg

и потом ссылки парсить reg.ex'ом или нужно записывать каждую ссылку на новую строку, т.е. так:

image_id, item_id, image_link
1, ............1,........... www.site.ru/image1.jpg
2, ............1, ...........www.site.ru/image2.jpg
3, ............1,............ www.site.ru/image3.jpg
4,.............1,.............www.site.ru/image4.jpg
5,.............2,..............www.site.ru/image5.jpg
6,.............2,.............www.site.ru/image6.jpg
7,.............2,.............www.site.ru/image7.jpg
8,.............2,.............www.site.ru/image8.jpg


?

10)Поле ITEMS.add_date(datetime) получает значение в формате YYYY-MM-DD HH:MM:SS, а мне нужно в таком: d-m-yyyy @ hh:mm:ss
Как это сделать, reg.ex'oм парсить эту строку или как-то по другому?



Спустя 6 минут, 35 секунд (17.03.2010 - 03:29) qpayct написал(а):
ответы на все эти темы уже неоднократно обсуждались в курсах twin'a иди на главную страницу и там ищи.
user posted image

Спустя 3 часа, 28 минут, 27 секунд (17.03.2010 - 06:57) Игорь_Vasinsky написал(а):
не хватает вопроса "А правильно я зделал что написал всё это..."

Спустя 2 минуты, 57 секунд (17.03.2010 - 07:00) Игорь_Vasinsky написал(а):
Цитата
10)Поле ITEMS.add_date(datetime) получает значение в формате YYYY-MM-DD HH:MM:SS, а мне нужно в таком: d-m-yyyy @ hh:mm:ss
Как это сделать, reg.ex'oм парсить эту строку или как-то по другому?



это жа ваши переменные в вашем скрипте... И только вы задаёте их формат, а почему не в php

Спустя 2 часа, 31 минута, 51 секунда (17.03.2010 - 09:32) Awilum написал(а):
Try >>><<< first

Спустя 1 час, 13 минут, 57 секунд (17.03.2010 - 10:46) sergeiss написал(а):
Awilum, qpayct - если вы даете ссылки, то давайте более конкретные ссылки! И уж тем более не отправляйте человека по адресу "к твину", не указав конкретно, что имеется ввиду smile.gif Потому что человек, только что "прибывший" на форум, вовсе не обязан знать, кто такой твин, и где его сайт находится.

Спустя 18 минут, 15 секунд (17.03.2010 - 11:04) Игорь_Vasinsky написал(а):
Цитата
1)какой функцией фильтровать get/post запросы от sql inj. и xss?
только mysql_escape_string() для этого достаточно?


mysql_escape_string()
Функция mysql_escape_string — Экранирует SQL спец-символы для mysql_query.

$post = htmlspecialchars($post); //преобразует специальные символы в HTML сущности.
$post = strip_tag($post) //функция возвращает строку str , из которой удалены HTML и PHP тэги
$post = addslashes($post);//Экранирует спецсимволы в строке - схожа с mysql_escape_string


безопасней передовать $_POST, а гет используй для передачи id или номера страницы (вообщем открытые данные)

Цитата
2)как защититься от подмены get/post запросов?


GET запросы у всех на виду - на странице обработчика пропиши для каждого $_GET - возможные варианты, если передан левый запрос - звони в милицию

$_POST запросы:

на странице с формой отправляй session_id() - на странице обработчика сравнивай сессии

Так же на странице проверь дествительно ли гость пришёл с твоей страницы с формой, а не локалхоста на денвере

<?php 
// $site_addres можете поменять на свое
// но лучше определить его в "общем" файле

if ($_SERVER['HTTP_REFERER'] =! $site_address) die;
?>


Так лучше вообше самому всё рассказать, может понятней получится.

Спустя 5 часов, 59 минут, 9 секунд (17.03.2010 - 17:03) Nikitian написал(а):
Вот сразу видно: человек постарался, подготовил пачку вопросов. Отвечу на те, в которых уверен.
1) От sql-inj:
mysql_escape_string(), mysql_real_escape_string()
От xss:
htmlspecialchars();
2) никак. Не доверяйте ничему, что приходит от пользователя, он всё может изменить.
3) Защитить сервер физически и нанять админа, который не даст пробиться напрямую к хранилищу сессий.
Если вопрос хотел звучать так: "Как защитить пользователей от подмены идентификатора сессии?" То тут так: храните ip пользователя и юзер-агент и сверяете их с теми, что получаете от пользователя + особо важные действия типа смены мыла, пароля, оплаты требуете дополнительно вводить пароль.
4) Быстрее работает. Хотя сессии, как key-value лучше хранить в специализированных key-value хранилищах, типа memcached.
5)
ALTER DATABASE `имя базы` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

9) Второй вариант предпочтителен и правелен: на каждую сущность отдельную запись в бд.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.