Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите пожалуйста создать сайт (откорректируйте плз. мою работу)
 
 автор: KIM   (24.09.2006 в 04:34)   письмо автору
 
 

Я решил создать сайт, точнее давно планирую и пытаюсь построить и кажется построил, но есть некоторые сомнения на счёт алгоритмов и вообще мысли некоторых активных частей сайта. Посмотрите пожалуйста и оцените и при обнаружении спорных, неразумных или опасных (хак) моментов посоветуйте что нибудь.

1) Система фильтрации всех типов входящих данных (все POST и GET):

function filter($filter_text){
$filter_text = substr($filter_text,0,10000);
$filter_text = htmlspecialchars(stripslashes($filter_text));
$filter_text = ereg_replace(chr(10),"<br>",$filter_text);
$filter_text = ereg_replace(chr(13),"",$filter_text);
$filter_text = ereg_replace("'","&#39;",$filter_text);
$filter_text = preg_replace("/\S{60,}/","&#34",$filter_text);
return $filter_text;}

2) Система распознования IP

function user_ip(){
if ($ip = getenv("HTTP_CLIENT_IP"))
{return $ip;}
if ($ip = getenv("HTTP_X_FORWARDED_FOR")) {
if ($ip == '' || $ip == "unknown")
{ $ip = getenv("REMOTE_ADDR"); }
return $ip;}
if ( $ip = getenv("REMOTE_ADDR") )
{ return $ip; } }

2) Система защиты от подбора и от флуда

If (isset($_POST['button'])){
1) Коннект к MySQL
2) Проверка количества строк в таблице temp с сегодняшней датой и IP пользователя подавшего запрос.
- Если их, например, больше 5 то
header("Loction: xx.htm");
mysql_close($a);
exit();
- А если ещё нет 5 то происходит Добавление в таблицу temp строчки с датой и IP. А если это защита системы авторизации, то на этом этапе ещё происходит проверка пароля и логина, если пароль верный то происходит удаление всех строк с таблицы temp и дальнейшие действия.
}

4) Система проверки пароля и логина соответственно

$l и $p - входящие данные (POST)
$a = mysql_connect('server', 'user', 'd4d3s56d3f');
mysql_select_db('kimbd', $a);
$b = mysql_query("select * from users where login='$l' and password='$p' ");
$b = mysql_fetch_array($b);
if (empty($b)){$access_var='false';}else{$access_var='true';}
mysql_close($a);

5) Система авторизации

При правильном пароле и логине создаётся переменная $_SESSION['login'] = $_POST['login'];
И всё...

6) Файл конфигурации (цвета, пароли, настройки и тп):

В рабочей странице на самом первом месте стоит вот это:
$def=1;
include('config.php');
далее переменные получившие значения в конфиг-файле используются в рабочей странице.
В файле config.php
if(empty($def)or($def)!==1){exit();}


Ну вот и всё...

   
 
 автор: valenok   (24.09.2006 в 12:42)   письмо автору
 
   для: KIM   (24.09.2006 в 04:34)
 

 <?
function filter($filter_text){
$filter_text substr($filter_text,0,10000);
$filter_text htmlspecialchars(stripslashes($filter_text));
$filter_text ereg_replace(chr(10),"<br>",$filter_text); 
$filter_text ereg_replace(chr(13),"",$filter_text);
$filter_text ereg_replace("'","&#39;",$filter_text);
$filter_text preg_replace("/\S{60,}/","&#34",$filter_text);
return 
$filter_text;}


Лишнее это всё..
При вводе в базу просто mysql_escape_string($text);
А при ыводе на экран nl2br(htmlspecialchars($text));

В базе указываешь длины значений в поле и они сами будут обрезаться..

   
 
 автор: KIM   (25.09.2006 в 15:23)   письмо автору
 
   для: valenok   (24.09.2006 в 12:42)
 

Это спасёт от всех скриптов вводимых пользователем?

   
 
 автор: valenok   (24.09.2006 в 12:43)   письмо автору
 
   для: KIM   (24.09.2006 в 04:34)
 


function user_ip(){ 
if ($ip = getenv("HTTP_CLIENT_IP")) 
{return $ip;} 
if ($ip = getenv("HTTP_X_FORWARDED_FOR")) { 
if ($ip == '' || $ip == "unknown") 
{ $ip = getenv("REMOTE_ADDR"); } 
return $ip;}
if ( $ip = getenv("REMOTE_ADDR") )
{ return $ip; } }



if ($ip = getenv("HTTP_X_FORWARDED_FOR")) { 


Невнимательность штука весьма опасная..
Да и куда тебе это всё?
$ip = $_SERVER['REMOTE_ADDR'];

   
 
 автор: KIM   (25.09.2006 в 15:22)   письмо автору
 
   для: valenok   (24.09.2006 в 12:43)
 

$ip = $_SERVER['REMOTE_ADDR']; - а если пользователь сидит через прокси-сервер

   
 
 автор: valenok   (24.09.2006 в 12:45)   письмо автору
 
   для: KIM   (24.09.2006 в 04:34)
 

 <?
If (isset($_POST['button'])){
//1) Коннект к MySQL
//2) Проверка количества строк в таблице temp с сегодняшней датой и IP пользователя подавшего запрос. 
//- Если их, например, больше 5 то 
header("Loction: xx.htm");
mysql_close($a);
exit();
}

- А если ещё нет 5 то происходит Добавление в таблицу temp строчки с датой и IP. А если это защита системы авторизации, то на этом этапе ещё происходит проверка пароля и логина, если пароль верный то происходит удаление всех строк с таблицы temp и дальнейшие действия.

5 много, на мой взгляд, ну если только сайт расчитан не на одарённых..

   
 
 автор: valenok   (24.09.2006 в 12:48)   письмо автору
 
   для: KIM   (24.09.2006 в 04:34)
 

<?
$l и $p
// - входящие данные (POST)
$a mysql_connect('server''user''d4d3s56d3f');
mysql_select_db('kimbd'$a);
$b mysql_query("select * from users where login='$l' and password='$p' ");
$b mysql_fetch_array($b);
if (empty(
$b)){$access_var='false';}else{$access_var='true';}
mysql_close($a);


В опервых можно просто mysql_result'ом
А во вторых он не нужен.
А я кстати так не выбираю.
Я выбираю пользователя с таким именем а скриптом сравниваю пароли..

<?
$l и $p
// - входящие данные (POST)
$a mysql_connect('server''user''d4d3s56d3f');
mysql_select_db('kimbd'$a);
$b mysql_query("SELECT * FROM `table` WHERE `password`='".$p."' AND `user`='".$l."' ");
if(
mysql_num_rows($b)!=1) die('Authorization error');
mysql_close($a);

   
 
 автор: KIM   (25.09.2006 в 15:21)   письмо автору
 
   для: valenok   (24.09.2006 в 12:48)
 

А на производительность и безопасность это влияет?

   
 
 автор: valenok   (24.09.2006 в 12:51)   письмо автору
 
   для: KIM   (24.09.2006 в 04:34)
 


5) Система авторизации

При правильном пароле и логине создаётся переменная $_SESSION['login'] = $_POST['login']; 
И всё...

6) Файл конфигурации (цвета, пароли, настройки и тп):

В рабочей странице на самом первом месте стоит вот это:
$def=1;
include('config.php');
далее переменные получившие значения в конфиг-файле используются в рабочей странице.
В файле config.php
if(empty($def)or($def)!==1){exit();}


Во первых отключи register_globals
или дай перемнной def значение по круче..

А в файле который инклудим:

 <?
if(!isset($def,$_SESSION['user']) OR $def!='FiFi77') die;

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования