Имейте некоторые вопросы о веб-разработке (PHP и MySQL)

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

  • Как Вы безопасно и надежный сохранили бы пароли в MySQL? Какие виды шифрования Вы использовали бы?
  • Если бы пользователям разрешили загрузить картинки, то было бы лучше сохранить их в базе данных, или их загрузили непосредственно на сервер?
  • Какие веб-приложения с открытым исходным кодом (такие как WordPress) Вы рекомендовали бы, чтобы я читал и учусь (предпочтительно что-то простое, но правильно написанное)?

Что-либо преподававшее в классе или записанный в книгах просто, кажется, не переводит хорошо в реальный производственный код. Они просто походят на очень простые примеры.

Спасибо!

5
задан GuyWithQuestions 8 February 2010 в 20:32
поделиться

7 ответов

Относительно хранения паролей: используйте одностороннее хеширование с солью для безопасности. Вот статья о том, почему .

3
ответ дан 14 December 2019 в 08:49
поделиться
  1. Хранить соленый хэш. Лично я бы отошел от md5 и вместо этого использовал что-то вроде sha. sha1 + соль продержится некоторое время =]

  2. Если вы храните изображения как капли в db, то в будущем вам, вероятно, будет проще их записать (вдоль w/the db, забирая их и т.д.). Но на самом деле, они будут чертовски быстры и в файловой системе, но я бы предпочел, чтобы они были в базе данных, так как у меня много кода, который взаимодействует с w/the db, и мне удобно работать в этой области. Это зависит от тебя.

  3. Я не уверен, что wordpress поможет вам построить сайт социальной сети... но он все равно хорош для чтения чужого кода. Я бы взглянул на несколько книг об архитектуре Амазона, чтобы заставить твой разум мыслить масштабно. Также, взгляните на некоторые книги по шаблонам дизайна.

Я бы также взглянул на что-нибудь вроде Zend Framework или CakePHP. CakePHP, вероятно, заставит вас работать довольно быстро, но я предпочитаю Zend, так как он очень мощный и не заставляет вас кодировать определенный стиль. CakePHP похож на рельсы для PHP.

Вы также захотите получить достойный уровень безопасности, как на стороне сервера, так и на стороне клиента, наблюдая за такими вещами, как перехват сеанса, sql инъекция, xss, попытки грубой силы, удаленные включения, загруженные файловые эксплойты и т.д.

Социальные сайты предлагают множество векторов атак для взломщиков.

Resources:

2
ответ дан 14 December 2019 в 08:49
поделиться
  1. Примените хеш-функцию к паролю (например, sha1 или md5). Затем добавьте к нему дополнительную «соль», взяв первые 5 символов md5 («социальный») или что-то в этом роде. Это зависит от вас, но это сделано для того, чтобы, если хакер получит доступ к вашей базе данных, он / она не сможет запустить ваши хешированные пароли через радужную таблицу и получить фактический пароль.
  2. У меня есть веб-сайт, который позволяет пользователям загружать изображения. Изображения упорядочены по ячейкам (то есть по 1000 изображений в ячейке) просто для того, чтобы она была организована (и у вас может быть только определенное количество файлов в папке, прежде чем вы столкнетесь с проблемами). Местоположение изображений хранится в базе данных, а также другая информация (например, идентификатор изображения, расширение файла, расположение корзины и т. Д.). Другая таблица в базе данных связывает идентификаторы изображений с пользователем. Кроме того, имя файла изображения после загрузки выглядит примерно так:

    {bin} / {userId} _ {pictureId} _ {token} _ {option}. {FileExt}

  3. Не уверен насчет веб-приложений, но вам определенно стоит использовать некоторые встроенные классы PHP, такие как уровень абстракции базы данных PDO.

1
ответ дан 14 December 2019 в 08:49
поделиться

Для хранения пароля я предлагаю использовать MD5 с солью. MD5 невозможно расшифровать, но можно взломать с помощью радужных таблиц. Например: Вот сайт для поиска MD5, который я закодировал

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

0
ответ дан 14 December 2019 в 08:49
поделиться

Вопрос 3: Я бы посоветовал изучить один из современных фреймворков в стиле Rails (мой любимый - Symfony), а не такое приложение, как Wordpress или Gallery. Они оба превосходны, но они эволюционировали из простых хаков, и не обязательно так, как я бы начал что-либо, если бы начинал с нуля.

Также, отвечая на вопрос 2, я ненавижу двоичные капли в базах данных. Файловые системы отлично подходят для этого.

И вопрос 1: односторонний хэш, как говорили другие. Функция Mysql password (), вероятно, в порядке.

0
ответ дан 14 December 2019 в 08:49
поделиться

Большинство разработчиков Java предпочтут видеть getters и setters.

Никто не может разрабатывать код в вашей упаковке, но другие потребляют его. Открывая явно открытый интерфейс, вы можете гарантировать, что внешние потребители используют ваш интерфейс так, как вы ожидаете.

Если вы публично раскрыли внутреннюю реализацию класса:

  • Невозможно помешать потребителям использовать класс ненадлежащим образом
  • Отсутствует контроль над точками входа/выхода; любое публичное поле может быть мутировано в любое время
  • Увеличение связи между внутренней реализацией и внешними потребителями

Поддержание гетеров и установщиков может занять немного больше времени, но предлагает гораздо больше безопасности плюс:

  • Вы можете повторно создать код в любое время, так сильно, как вам захочется, если вы не сломаете общедоступный API (getters, setters и public methods)
  • Модульное тестирование хорошо инкапсулированных классов проще - вы тестируете открытый интерфейс и все (только ваши входы/выходы в «черный ящик»)
  • Наследование, композиция и дизайн интерфейса все будет иметь больше смысла и быть проще в разработке с разъединенными классами
  • Решите, что вам нужно добавить некоторую валидацию к мутатору, прежде чем он будет установлен? Одно хорошее место - внутри установщика.

Вы должны решить, стоит ли преимущества за дополнительное время.

-121--4116883-

Я успешно использовал PortAudio.

Я взял несколько отрывков из моей игрушечной программы, чтобы сделать очень простой «эхо» пример, ниже:

(запустить с наушниками. это цикл обратной связи от микрофона к динамикам и может стать очень громким после нескольких раундов обратной связи)

import Control.Monad (forever)
import Data.Int (Int16)
import Foreign.Ptr (nullPtr)
import Sound.PortAudio

initPortAudio :: Int -> IO (PaStream Int16)
initPortAudio blockSize = do
  Right NoError <- initialize
  Just micDevIdx <- getDefaultInputDevice
  Just spkDevIdx <- getDefaultOutputDevice
  Right paStream <-
    openStream
    (Just (StreamParameters micDevIdx 1 PaInt16 0.1 nullPtr))
    (Just (StreamParameters spkDevIdx 1 PaInt16 0.1 nullPtr))
    44100 blockSize
    :: IO (Either String (PaStream Int16))
  Right NoError <- startStream paStream
  let zeroBlock = replicate blockSize [0]
  Right NoError <- writeStream paStream zeroBlock blockSize
  return paStream

main :: IO ()
main = do
  paStream <- initPortAudio blockSize
  forever $ do
    Right numSampsAvail <- getStreamReadAvailable paStream
    Right curSamps <- readStream paStream 1 numSampsAvail
    Right NoError <- writeStream paStream curSamps numSampsAvail
    return ()
  where
    blockSize = 0x800

Работает здесь в Leopard с GHC 6.10.4.

Моя собственная игрушечная программа фактически использует только вход звука и выводит нули на выход звука (не делая этого PortAudio жалуется).

-121--3723732-

Для хранения образов я всегда хранил их на жестком диске, но используя очень жесткий сценарий проверки образов, чтобы убедиться, что образы не содержат вредоносного кода. Я также используется для применения перезаписи URL, чтобы пользователи не могли найти реальный путь к изображениям.

Разве у вас нет странного ощущения, что вы храните изображения в базах данных? База данных mysql может расти очень быстро, и вам всегда нужен PHP скрипт для отображения изображений, что означает, что это делает ваш сервер медленнее.


Что касается места хранения паролей, используйте соление, как ответили другие.


Наконец, для документации, я очень люблю видеть, как Wordpress структурирован. Я часами смотрел исходный код и читал документы. Это просто ужасно хороший пример того, как организовать любой сайт.

1
ответ дан 14 December 2019 в 08:49
поделиться

Возможно, что-то сохраняется на .resx формы вместо .designer? Я не могу вообразить , почему это сделало бы это, но да...

Если все остальные ошибки не удается, попробуйте удалить ListView из формы. Затем создайте новую нежелательную форму в вашем проекте, воссоздав ListView на нежелательной форме, проверьте нежелательную форму, чтобы убедиться, что вы не получили странное поведение вуду, а затем скопируйте ListView из нежелательной формы обратно в вашу реальную форму?

Ужасно запутанный, я знаю...

-121--2850114-

Aspell.Net выглядит хорошо, но, похоже, больше не поддерживается. Я не смог заставить его работать на своей машине.

После поиска в SourceForge я обнаружил NHunspell , который является портом .Net средства проверки периода от OpenOffice.org. Он предоставляет методы проверки орфографии, поиска синонимов и расстановки переносов. Он активно поддерживается в это время, и поставляется с простым для понимания образцом кода.

По собственным словам проекта:

Проверка периода, Гипенация и Тезаурус: NHunspell

NHunspell - это свободный период с открытым исходным кодом для .NET Framework. C # и Доступен образец кода Visual Basic для проверки периода, расстановки переносов и поиск синонимов через тезаурус.

NHunspell основан на Hunspell и вызывает проверку периода Open Office, переносы и тезаурус в Microsoft ® .NET Framework. NHunspell является библиотекой и оболочками .NET (C #, VB) собственные библиотеки Hunspell, дефис и MyThes.

Интегрированные библиотеки используются в OpenOffice и работа с словари опубликованы на OpenOffice.org. Лицензия

NHunspell лицензирована по: GPL/LGPL/MPL. Свободное использование в коммерческих целях допускаются приложения в соответствии с лицензии LGPL и MPL. Ваш коммерческое приложение может связать против DLL NHunspell.

NHunspell

-121--1533147-

Ответы на все эти вопросы были получены ранее.

Как бы Вы безопасно и безопасно хранили пароли в MySQL? Какие типы шифрования можно использовать?

См. https://stackoverflow.com/search?q=password+hash+database+php

Если пользователям было разрешено загружать картины, лучше ли хранить их в базе данных или загружать непосредственно на сервер?

См. https://stackoverflow.com/search? q = store + images + database + php

Какие веб-приложения с открытым исходным кодом (такие как WordPress) вы бы рекомендовали мне читать и изучать (желательно что-то простое, но хорошо написанное)?

Смотрите https://stackoverflow.com/search? q = social + network + php

Также следует учитывать, что запуск и управление сайтом социальной сети - это не просто кодирование. Вы действительно хотите создать его с нуля? Подумайте, будете ли вы в равной степени довольны чем-то вроде Нинга, где каждый может создать свое собственное сообщество без программирования?

0
ответ дан 14 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

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