Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Безопасное программирование на PHP

Автор: xntx
Дата сообщения: 25.10.2003 12:10

Цитата:
register_globals boolean
Tells whether or not to register the EGPCS (Environment, GET, POST, Cookie, Server) variables as global variables. For example; if register_globals = on, the url http://www.example.com/test.php?id=3 will produce $id. Or, $DOCUMENT_ROOT from $_SERVER['DOCUMENT_ROOT']. You may want to turn this off if you don't want to clutter your scripts' global scope with user data. As of PHP » 4.2.0, this directive defaults to off. It's preferred to go through PHP Predefined Variables instead, such as the superglobals: $_ENV, $_GET, $_POST, $_COOKIE, and $_SERVER. Please read the security chapter on Using register_globals for related information.



Цитата:
Не понял, что за фича?

этот register_globals, это никакой не баг. где баг то?
Автор: Terabyte
Дата сообщения: 28.10.2003 20:57
Я сейчас занят написание движка для раздела Статьи, который работает с базой на MySQL, а не файле. Интересует какие ошибки связанные с безопасностью могу быть при кодинге скрипта для работы с MySQL?
Автор: xntx
Дата сообщения: 28.10.2003 22:24
Terabyte
главное не передавать данные прямо в запрос, тоесть не делать чтото типа:
.....WHERE id = $_GET['id']....
это вобще наверное единственная и самая распространенная ошибка.
везде юзай addslashes();
Автор: Terabyte
Дата сообщения: 29.10.2003 06:36
xntx
А как тогда передавать? Методом ПОСТ или как? =)
Автор: Vaulter
Дата сообщения: 29.10.2003 14:19
addslashes(); извините, г*вно полное......для защиты...
его используют только когда нужно чистый хтмл в БД загнать...
а ВСЕГДА И ВЕЗДЕ юзают:
htmlspecialchars($str,ENT_QUOTES);
Автор: Terabyte
Дата сообщения: 29.10.2003 20:30
А если я все таки захочу передать через параметр id открываемой строки, то я обезапашу себя от взлома таким вот действием:

addslashes($go);
$go=(int)$go;
Автор: xntx
Дата сообщения: 29.10.2003 21:15
Vaulter
слышь, ты пойди успокойся, чайку попей.
наверное не знаешь что в БД(если это чтото типа My/MSSQL) хтмл можно сувать незаслешивая
а с
Цитата:
htmlspecialchars($str,ENT_QUOTES);

ты ничего особенного не добьешься, даже напортишь все. т.к. будешь делать запрос по русскому слову, а оно превратится в чтото типа [q][/q]

Terabyte
можно и так, а можно например:

Код: $go = (!is_numeric($go)) ? 'mydie' : $go;
if (
$go == 'mydie') die('Странный какой-то id получается... Сохраню ка я ваш IP на всякий случай');
Автор: Terabyte
Дата сообщения: 30.10.2003 05:55
А что значит:
$go = (!is_numeric($go)) ? 'mydie' : $go;
не мог бы пояснить =)
Автор: Cheery
Дата сообщения: 30.10.2003 05:58
Terabyte

Цитата:
не мог бы пояснить =)

аналог if... else - просто запись другая.. покороче.
http://www.php.net/manual/en/control-structures.alternative-syntax.php
Автор: Vaulter
Дата сообщения: 30.10.2003 09:21
xntx

Цитата:
слышь, ты пойди успокойся, чайку попей.

спасибо за заботу, но я вообщето спокоен.

Цитата:
наверное не знаешь что в БД(если это чтото типа My/MSSQL) хтмл можно сувать незаслешивая

да что ты говоришь!...ну попробуй засунь строку <b>there's string</b> в БД......

эт ты наверное не в курсе, что на многих серваках стоит в PHP.INI такая строчка
magic_quotes=on
при которой просто во все POST переменные добавляется слэш по умолчанию.


Автор: xntx
Дата сообщения: 30.10.2003 23:09
Vaulter

Цитата:
да что ты говоришь!...ну попробуй засунь строку <b>there's string</b> в БД......

засунул, дальше что?

Цитата:
эт ты наверное не в курсе, что на многих серваках стоит в PHP.INI такая строчка
magic_quotes=on
при которой просто во все POST переменные добавляется слэш по умолчанию.

а это тут при чем? я то в курсе... но причем тут это я не понимаю.
Автор: Vaulter
Дата сообщения: 31.10.2003 06:02

Цитата:
наверное не знаешь что в БД(если это чтото типа My/MSSQL) хтмл можно сувать незаслешивая


Цитата:
засунул, дальше что?

опа! ну ка, запросец в студию попросим
Автор: IntenT
Дата сообщения: 31.10.2003 09:39
Vaulter
insert into test (str) values ("<b>there's string</b>");
Автор: Vaulter
Дата сообщения: 31.10.2003 13:43
IntenT
хе ) ну хорошо хорошо ))
а строку
<b><a href="smth link" title="linka">there's string</a></b>

Автор: vu1tur
Дата сообщения: 31.10.2003 13:56
Vaulter

Код:
mysql> insert into t1 values ("<b><a href=\"smth link\" title=\"linka\">there's string</a></b>");
Query OK, 1 row affected (0.05 sec)

mysql> select * from t1;
+-------------------------------------------------------------+
| col1 |
+-------------------------------------------------------------+
| <b><a href="smth link" title="linka">there's string</a></b> |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
Автор: xntx
Дата сообщения: 31.10.2003 14:05
Vaulter
это называется "слыхал звон, но не знаю где"...

вернемся к тому что ты сказал:

Цитата:
addslashes(); извините, г*вно полное......для защиты...
его используют только когда нужно чистый хтмл в БД загнать...
а ВСЕГДА И ВЕЗДЕ юзают:
htmlspecialchars($str,ENT_QUOTES);

1. не "г*вно полное", и не "только"
2. а зачем его юзать интересно "всегда"? если ты например делаешь query в базу по этому полю - то он тебе и не нужен. другое дело есло этот код потом может попасть в вывод на странице... тогда можно сделать XSS
Автор: Terabyte
Дата сообщения: 31.10.2003 18:45
Не много не в тему вопрос: вот допустим я в базу записал одинарную кавычку, но при выводе она первращается у меня почему то в одинарную. Как сдеать вывод из базы одинарной кавычки =)
Автор: vu1tur
Дата сообщения: 31.10.2003 18:55
Terabyte

Цитата:
записал одинарную


Цитата:
первращается у меня почему то в одинарную


Цитата:
вывод из базы одинарной кавычки

хм... и везде одинарные ))
посмотри на мой пред. пост. Там выводится именно одинарная, никаких проблем нет.
Автор: Sergeant
Дата сообщения: 31.10.2003 23:12
Давеча эту тему в жж поднимали. Ссылка.
Автор: Terabyte
Дата сообщения: 31.10.2003 23:18
vu1tur
Ну а вот у меня не пашет =(
Sergeant
И какое решение?
Автор: xntx
Дата сообщения: 31.10.2003 23:31
Terabyte
дык что у тебя не пашет? ты це сам написал: засовываешь одниарные, получаешь одинарные.
оно что, силами телепатии должно в двойные превращатся?
Автор: Sergeant
Дата сообщения: 01.11.2003 02:39
Terabyte, там в смысле тема собственно безопасности программирования (т.е. тема этого топика), а не конкретно мытарств с кавычками. Так что приведены общие рекомендации.
Автор: Terabyte
Дата сообщения: 01.11.2003 16:48
А вот еще вопрос по защите кода от взлома при кодинге PHP+mysql:
Допустим ссылкой source.php?go=wuftpd-freezer.c
Запршивается СКЛ комманда которая ищет в назначеном столбце запись из переменной $go и выводит всю строку в которая она находится. Вопрос: какие фильтры на значение переменной $go нужно поставить, чтобы через нее нельзя было исполнять СКЛ комманды?
Автор: xntx
Дата сообщения: 01.11.2003 17:25
Terabyte
addslashes(); и я думаю хватит
Автор: Terabyte
Дата сообщения: 01.11.2003 17:34
Мне ща посоветовали сделать просто запрос такого вида:
query="select text FROM $table where name_file='".$go."'";

Это будет выходом?
Автор: xntx
Дата сообщения: 01.11.2003 17:50
Terabyte
$query = "SELECT text FROM $table WHERE name_file = '$go'";
Автор: Terabyte
Дата сообщения: 01.11.2003 18:25
xntx
Ну у меня так и есть в данный момент =)
Автор: xntx
Дата сообщения: 01.11.2003 19:16
Terabyte
ну так и оставь
Автор: Terabyte
Дата сообщения: 01.11.2003 19:48
еще на одном форуме мне посоветовали mysql_escape_string
http://ru3.php.net/manual/ru/function.mysql-escape-string.php

Что конкретно она делает?
Автор: xntx
Дата сообщения: 01.11.2003 20:20
Terabyte
ну ты как издеваешься... слэши она добавляет, делает тоже самое что и addslashes()
ты сначала с тем что у тебя есть разберись, и попробуй это хакнуть...

Страницы: 1234567

Предыдущая тема: WAP+PHP и русские буквы


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.