[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита от взлома и прочие фишки. Оптимизация.
dima4321
Есть простенькие скритпы , которые привязаны к сайту, но пока все слишком просто.

если кто может подредакируйте мои перлы )).

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

Вот например мой поиск. Интерполяется элементов массива не лучшая, но зато читаемая ))

$query="(SELECT * FROM groups WHERE NAME LIKE '%".strtoupper($_POST['iskat'])."%') UNION ALL (SELECT * FROM groups WHERE GENRE LIKE '%".strtoupper($_POST['iskat'])."%') "; 

$result = mysql_query($query) or die("Запрос ошибочный");


echo "<h2>Your results of search</h2><br><br>";

echo "<table border=3>";

while ($row = mysql_fetch_assoc($result)) {

echo "<tr>";


echo"
<td><a href='albums/
$row[NAME].html'>$row[NAME]</a></td>

<td><a href='style/
$row[GENRE].html'>$row[GENRE]</a></td>

<td><a href='history/
$row[NAME].html'>ABOUT $row[NAME]</a></td>";

echo "</tr>";


}

echo "</table>";

$n= mysql_num_rows($result);



mysql_free_result($result);

if($n>0)

{


echo "<br><br><h2><a href='index.php'>BACK HOME</a></h2>";

}

else

{

echo "<br><br>Sorry<br><br>";
echo "<h2><a href='index.php'>BACK HOME</a></h2>";



Вот также проста выборка на одной из страниц моего сайта
Код:
$sql = "SELECT * FROM groups WHERE GENRE = '$page'"; 


$data = mysql_query($sql);

echo "<h1>$page BANDS</h1>";

echo "<table border=3>";
echo "<tr>
<th>CDs & ALBUMS</th><th>HISTORY</th></tr>"
;

while($row=mysql_fetch_assoc($data)) {

echo "<tr>";

echo "

<td><a href='../albums/
$row[NAME].html'>$row[NAME]</a></td>


<td><a href='../history/
$row[NAME].html'>HISTORY OF $row[NAME]</a></td>";

echo "</tr>";

}
echo "</table>";




Ну и например добавление
Код:
$NAME=$_POST['NAME']; 
$GENRE=$_POST['GENRE'];
$TEXT=$_POST['TEXT'];
$HIDE=$_POST['HIDE'];

/* составить запрос для вставки информации о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES('ID','$NAME','$GENRE', '$TEXT','PRICE', '$HIDE','ABOUT','ATRIKLES')";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die(mysql_error());
echo "Информация о вас занесена в базу данных.";

/* Закрыть соединение */
mysql_close();

?>

<br>
<
br>
<
br>
<
a href="add.php">Back Home</a>




Очень прошу ткните во все косяки носом ! Обругайте ! И покажите как правильно ! )



Спустя 9 минут, 16 секунд (1.02.2011 - 12:14) linker написал(а):
1. Самая главная ошибка - не проверяем данные в $_POST и пихаем их как есть в запросы.
2. Значения атрибутов в html-элементах (тэгах) обрамляются в двойные кавычки.
<img src="image.jpg"> или <div id="1" class="myclass">
3.
echo '<td><a href="../albums/' . $row['NAME'] . '.html">' . $row['NAME'] . '</a></td>';
или так
echo '<td><a href="../albums/', $row['NAME'], '.html">', $row['NAME'], '</a></td>';

4. В ассоциативном массиве, при доступе к элементу по ключу, название ключа ТРЕБУЕТСЯ заключать в кавычки $row['NAME']
5. $row['NAME'] и $row['name'] будут указывать на разные элементы массива, внимательнее.
6. Много echo там где можно обойтись и одним.

Вкратце.

Спустя 9 минут, 56 секунд (1.02.2011 - 12:24) alex12060 написал(а):
mysql_real_escape_string() - самое главное при выборке и записи в БД.

Спустя 2 минуты, 31 секунда (1.02.2011 - 12:27) alex12060 написал(а):

$NAME=$_POST['NAME'];
$GENRE=$_POST['GENRE'];
$TEXT=$_POST['TEXT'];
$HIDE=$_POST['HIDE'];


Я туда такого понапихасть могу, ты же йокнишься потом)
Да даже если без взлома, то я могу пошалить вот так:
Вводя имя артиста, напишу:
<script>for(i=1; i<1000; i++) alert('Ты му**к!!!');</script>

И все, кто не зайдет на твой сайт, будет знать, кто он на самом деле)

Спустя 14 минут, 13 секунд (1.02.2011 - 12:41) dima4321 написал(а):
Цитата (linker @ 1.02.2011 - 09:14)
1. Самая главная ошибка - не проверяем данные в $_POST и пихаем их как есть в запросы.
2. Значения атрибутов в html-элементах (тэгах) обрамляются в двойные кавычки.
<img src="image.jpg"> или <div id="1" class="myclass">
3.
echo '<td><a href="../albums/' . $row['NAME'] . '.html">' . $row['NAME'] . '</a></td>';
или так
echo '<td><a href="../albums/', $row['NAME'], '.html">', $row['NAME'], '</a></td>';

4. В ассоциативном массиве, при доступе к элементу по ключу, название ключа ТРЕБУЕТСЯ заключать в кавычки $row['NAME']
5. $row['NAME'] и $row['name'] будут указывать на разные элементы массива, внимательнее.
6. Много echo там где можно обойтись и одним.

Вкратце.

linker Большое спасибо. Вопросы остались ))

2. Чем криминально обрамлять атрибуты html тегов в ордиарные кавычки.

3. и 4. Твой вывод массива оптимальный. Не спорю. Но ведь в моем случае интерполяции массива в строки четко написано , что кавычки к ключу применять не надо иначе это вызовет ошибку и надо обрамлять фигурными скобками массив. Речь об асоциативных одномерныых которые идут в строке .

6. echo заменю одним )


из перечисленного не будет ли это экономией на спичках ??
Существенно ли возрастет быстродействие.??


Спустя 2 минуты, 55 секунд (1.02.2011 - 12:44) dima4321 написал(а):
Цитата (linker @ 1.02.2011 - 09:14)
1. Самая главная ошибка - не проверяем данные в $_POST и пихаем их как есть в запросы.


Чем проверяем ...?)))

Для начала isset и empty а потом слешуем ?? ммм

Спустя 16 минут, 8 секунд (1.02.2011 - 13:00) linker написал(а):
1. Слэшуем, удаляем тэги если нужно.
2. Культура верстки и прочие грабли
3. 4. В твоем случае PHP не поймет, что ты пытаешься тут отдать значение элемента массива, для этого нужно заключать в {}. Но и это мешает чисто визуально определять в строке переменные. Да и быстрее оно работает.

Здесь не только быстродействие, но и стиль.


_____________
Работаю за еду ! __))
И за плюсики !
Быстрый ответ:

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