Django: как Вы служите медиа / таблицы стилей и ссылка на них в шаблонах

Существует множество способов предотвращения SQL-инъекций и других SQL-хаков. Вы можете легко найти его в Интернете (Google Search). Конечно, PDO - одно из хороших решений. Но я хотел бы предложить вам некоторые хорошие ссылки с помощью SQL Injection.

Что такое SQL-инъекция и как предотвратить

Руководство PHP для SQL-инъекция

Microsoft объяснение SQL-инъекции и предотвращения в PHP

и некоторые другие, подобные Предотвращение SQL-инъекций с MySQL и PHP

Теперь, почему вам нужно предотвратить запрос из SQL-инъекции?

Я хотел бы сообщить вам: почему мы пытаемся предотвратить SQL-инъекцию с помощью Ниже приведен короткий пример:

Запрос для проверки подлинности входа:

$query="select * from users where email='".$_POST['email']."' and password='".$_POST['password']."' ";

Теперь, если кто-то (хакер) помещает

$_POST['email']= admin@emali.com' OR '1=1

и пароль что-либо ....

Запрос будет анализироваться в системе только до:

$query="select * from users where email='admin@emali.com' OR '1=1';

Другая часть будет отброшена. Итак, что будет? Неавторизованный пользователь (хакер) сможет войти в систему как администратор без своего пароля. Теперь он может делать все, что может сделать администратор / адрес электронной почты. См., Очень опасно, если SQL-инъекция не предотвращается.

44
задан Josh Smeaton 11 May 2011 в 21:45
поделиться

7 ответов

Я просто должен был изобразить это сам.

settings.py:

MEDIA_ROOT = 'C:/Server/Projects/project_name/static/'
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'

urls.py:

from django.conf import settings
...
if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*) 

шаблонный файл:

<link rel="stylesheet" type="text/css" href="/static/css/style.css" />

С файлом, расположенным здесь:

"C:/Server/Projects/project_name/static/css/style.css"
, 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), )

шаблонный файл:

<link rel="stylesheet" type="text/css" href="/static/css/style.css" />

С файлом, расположенным здесь:

"C:/Server/Projects/project_name/static/css/style.css"
51
ответ дан Chris 26 November 2019 в 22:10
поделиться

У Django уже есть процесс контекста для MEDIA_URL, см. документация Django .

Это должен быть availbale по умолчанию (если Вы не настроили CONTEXT_PROCESSORS и забыли добавлять его) в RequestContext.

11
ответ дан 26 November 2019 в 22:10
поделиться

Я обычно делаю свой собственный Шаблон простым тегом, потому что Django не дает файлы CSS/JavaScript. Apache делает это так, мой URL медиа обычно http://static.mysite.com .

yourApp/templatetags/media_url.py:

from django.template import Library
from yourapp.settings import MEDIA_URL
register = Library()

@register.simple_tag
def media_url():
    return MEDIA_URL

И в моем шаблонном файле:

{% load media_url %}
<link href="{{ media_url }}css/main.css" rel="stylesheet" type="text/css">

Вы могли также сделать Ваш собственный препроцессор контекста для добавления media_url переменной в каждом шаблоне.

6
ответ дан Community 26 November 2019 в 22:10
поделиться

Я просто использую абсолютное именование. Если Вы не выполняете сайт в глубоком пути (или даже если бы Вы), я отбросил бы .. и пошел бы для чего-то как:

<link rel="stylesheet" type="text/css" href="/media/styles.css">
2
ответ дан Oli 26 November 2019 в 22:10
поделиться

У меня есть несколько идей, я не знаю, какой из них работает на меня:)

Удостоверяются, что использовали запаздывающую наклонную черту и имели это отличаться от установки MEDIA_URL (так как тот же URL не может быть отображен на два различных набора файлов).

Это от http://docs.djangoproject.com/en/dev/ref/settings/#admin-media-prefix

, Во-вторых, может случиться так, что Вы путаете каталоги в своей файловой системе с путями URL. Попытайтесь использовать абсолютные URL, и затем совершенствуйте их вниз.

1
ответ дан sykora 26 November 2019 в 22:10
поделиться

Просто мысль я вмешался бы быстро. В то время как все суждения здесь работают просто великолепно, и я действительно использую пример Ty при разработке, как только Вы поражаете производство, Вы могли бы хотеть решить служить файлам через прямой Apache, или какой бы ни еще сервер Вы используете.

то, Что я делаю, я устанавливаю субдомен, как только я сделан, разработав и заменяю все ссылки на статические медиа. Например:

<link rel="stylesheet" type="text/css" href="http://static.mydomain.com/css/style.css" />

причины того, чтобы сделать это являются двукратными. Во-первых, просто кажется, что это было бы медленнее, чтобы сделать, чтобы Django обработал эти запросы, когда это не нужно. Во-вторых, так как большинство браузеров может на самом деле загрузить файлы одновременно с 3 различных доменов, использование второго субдомена для Ваших статических файлов на самом деле ускорит скорость загрузки Ваших пользователей.

1
ответ дан David 26 November 2019 в 22:10
поделиться

Еще нужно добавить, что если у вас есть отдельный медиа-сервер в субдомене / другом домене, вы можете отключить файлы cookie для своего статического носителя. Небольшая экономия на обработке и пропускной способности.

0
ответ дан 26 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: