[Музыка, играющая] DAVID Маланом: Это CS 50, и это начало недели девять. И то, что мы думали, что мы делаем сегодня, это не только закрыть главу о прошлой недели Материал, где мы сосредоточились на сервере сторона веб-программирование с PHP и SQL, некоторые базы данных материал. Мы будем говорить о чем-то вроде сегодня безопасность, а затем Переход к программированию на стороне клиента язык известен как JavaScript. Но во-первых, некоторые выкуп. Вы можете вспомнить, что на Среда, я отправился написать сайт, который взял на входе пользователя с помощью HTML-форм, что затем сохраняются что имена пользовательского ввода, телефон номера, и телефон носителей в базе данных. А потом у меня было немного команду строка сценария написал в PHP , который должен был повторять более строк в базе данных и отправить текстовые сообщения. Несмотря на несколько, несколько попыток, мы не заставили это работать до конца. Так я провел этим всю неделю работает на этот код, чтобы получить нас мимо точки где мы остановились, в результате чего все Я получил к концу среды было это текст сообщения от Марго, как я боролся, затем текстовое сообщение от другого одноклассник, Вы должны эту Давида. Вслед за этим, удивительно обнадеживает. Продолжал идти, очень отрадно. Я почти не получил его до then-- и это примечание, мы закончили в среду. И тогда на самом деле, возможно, мой любимый, Мгновение спустя, это произошло в. Черт прямая трансляция. Итак, сегодня мы это исправить с быстрым посмотреть на то, что я сделал с тех пор. Так весь этот код доступен онлайн с прошлой недели, недели восемь, Исходный код. И вы увидите, что я прошел через, и я на самом деле очистить вещи немного. Я представил пару с другом особенности базе данных SQL. Например, вместо того, просто сделать носитель вар гольца как я думаю, что я сделал на лету на прошлой неделе. Я вместо определил его как то, что называется перечисление. И некоторые из вас, возможно, видели это как мы исследовали С. Enum на самом деле Особенностью С, где вы можете перечислить целую кучу констант и назначить их автоматическое значения, как один, два, три, четыре без жестких кодовыми номерами. Так SQL поддерживает то же самое, в котором, если у вас есть поле базы данных, только вы хочу взять на одной из конечных значения, вы можете буквально указать его как я сделал там в течение четырех популярные мобильников американские операторы. Так что я сделал это. И я сделал ряд изменений, как хорошо, самое главное из которых был Виртуальный работы, потому что отзыве, что эта программа опиралась на которых как правило, называют электронной почте, чтобы SMS шлюз, который является просто причудливый способ сказать, что Verizon, и AT & T, и другие люди поддерживают сервер, в результате чего, если он получает по электронной почте, он преобразует его в SMS и посылает текст Сообщение на другой телефон. Так что, если я сделал это правильно, вот новый и улучшенный вид что собирается поговорить с Новый и улучшенный код, который Вы можете играть с онлайн. И это будет, надеюсь, сделать мой телефон сигнал в минуту. Итак, сначала я собираюсь ввести в мое имя. Во-вторых, я не собираюсь сделать это в этот раз. Я собираюсь сделать Осмотрите элемент. И это всего лишь мелочь, так что я не создать часов после производства работать, как я сделал в прошлый раз. Там сейчас находится мой номер телефона. Я выбрать Verizon. И вот, давайте обратимся на этой микрофоном здесь, и цель эта в моем телефоне здесь. Я собираюсь нажмите Регистрация, которые, будем надеяться, положить его в базу данных. Теперь я собираюсь поехать в Программа командной строки, которые Напомним назывался точка слэш Текст и скрестите пальцы. Здесь мы идем. [PHONE вмятины] [Аплодисменты] DAVID Маланом: Так веселее, чем this-- это интересно, конечно, если бы я попасть в него. Но это более интересно, я думал, если мы создан один из тех моментов в кино где как-то на самом деле плохо, что произошло в мире, и, как и все АНБ Народной телефонов начать пищать с помощью текстовых сообщений готовность их к этому факту. Так я думал, что мы попробуем воссоздать то же самое здесь, чего не используя базу данных, Я вместо заранее написал программу, которая выглядит следующим образом. Это index.php-- и я положил этот код на сайте как well-- что, по-видимому просто оказывает form.php, используя стиль парадигму MVC, что мы говорить о более подробно в проблемной набора семь. Это форма довольно проста. Это собирается представить Файл называется here.php по почте. И это, по-видимому собирается просить для имени, и номер телефона, а затем с помощью так называемых Выберите меню, это собираюсь дать вам по меньшей мере четыре популярные мобильников американские операторы, а затем позволяют эффективно принять участие, нажав здесь. И здесь, между тем, собирается заимствовать часть кода с прошлого раза. И если вы просто бегло это, Вы увидите, что есть целая куча проверки ошибок. Но красота в конце, что мы не пишем в базу данных сегодня. Мы держим его простым и просто отправке, мы надеемся, Текст сообщения через функции I написал в течение последних нескольких дней вызову Текст, который находится в функции. PHP, что опять-таки доступны в Интернете. Так что, если вы хотите принять участие в этом. Мы не собираемся быть хранения ничего. Перейти к следующему адресу здесь в режиме реального времени. Не помещайте их только пока, но давайте сможем ли мы иметь один из этих фильмов моменты, когда телефон каждого начинает пищать, надеюсь, просто один раз в этом году, в отличие от 2011 где это пошло ужасно криво. И как только вы идете по этому адресу, Вы должны увидеть супер простую форму что если у вас есть имя, сотовый телефон число, и перевозчик телефон, что совпадает со списком там, пойдите вперед и заполнить форму. Но не ударил представить только пока. Форма будет выглядеть вот так. Идем дальше и ввести в Ваше имя, номер телефона. Oop, кто-то собирается на опережение. Это нормально. ОК, все это заполнил форму. Это должно работать на телефон тоже, если хотите. Ладно, на старт, внимание, марш. Хит Здесь. Что? Нет. Клянусь Богом, я тестировал это несколько раз сегодня. Вы получили это? [Вставляя ГОЛОСА] DAVID Маланом: ОК, ошибка пользователя, возможно. Это два. Он работал для двух из несколько сотен, три, четыре. Хорошо, что это хорошо. Четыре из пяти для Правильность, как о. Так что же произошло? Так, предположительно, не видя ваш экраны, поэтому, возможно, это уже с ошибкой? Это, наверное, что мы были просто пытается сделать слишком много подключений на почтовый сервер Гарвардского все в один раз из того же IP-адреса. Я просто предполагаю, что, так как я не сделал есть роскошь тестирования этот код с некоторыми 300 человек заранее но сейчас понимаю, что что по крайней мере должна получили работу на этот раз. Ладно, так почему же все это более уместны в том, что происходит? Ну во-первых, быстро Пару объявлений. Так что, если вы хотите присоединиться Чанг, и Ник, и другие на обед в пятницу, сделать RSVP в обычное URL там. Если вы думаете о концентрируясь или делать вторичный в CS, будь ты на втором курсе, или первокурсник, или даже младшего или старшего в этой точке и еще можно выжать в курсах, понимают, что в инженерной школе собирает для свободного Бен и Мороженое и советы Джерри в среду вскоре после класса в 4:00 вечера в здании CS на Максвелла Дворкин. Если это слишком быстро на экране, просто пойти в cs50.harvard.edu для ссылка на мероприятии Facebook где можно увидеть более подробную информацию. Между тем, я думал, что исправить еще одна вещь, я попал впросак в среду. Оказывается, что ID-Марко на Facebook, не было три года. Это было четыре года. Оказывается, он был больше тест счета, чем я помню. Но то, что это было похоже на возможность сделать, это подтянуть URL вроде этого. Вот и получается, что Facebook имеет API, интерфейс прикладного программирования, которая представляет собой механизм, в котором вы может запрашивать данные программно на Facebook и получить обратно машину читаемой, не веб-страницы но только простой текст, что-то называется JavaScript Object Notation. И в самом деле, если я посещаю этот URL, и увеличить, по умолчанию, это Марк публично доступная информация. И интересная деталь вот только, что его ID Действительно, номер четыре, который я понял, как только я сделал это. Вы можете сделать это самостоятельно, если вы знаете, Ваше имя пользователя Facebook, если у вас есть. Просто введите его верхнюю есть. И все это не является частным. Я просто делаю это даже в режиме инкогнито. Так что я даже не вошли в систему. И вы видите, что я по-видимому, был номер пользователя 6454 на Facebook, которая не слишком плохо в эти дни. Так или иначе, вы также увидите Дополнительная информация есть. И полезный аспект того, что это ты может написать собственную программу, что как-то объединяет данные, как это Ваше приложение. Вы можете расширить возможности пользователей в войти в свой веб-сайт, не используя свои собственные пользовательские логин и пароль, но, может быть, их Facebook Войти и получить информацию даже о своих друзьях, если они одобрить такие, или аналогичный. Так, обратите внимание, что CS50, слишком, есть некоторые собственные API,, один для данных каталога Конечно, некоторые для меню объятия в столовой залы, все здания и места на территории кампуса нас есть API для а что вы можете запросить же и получить назад текстовая информация, вы можете интегрировать в PHP, или JavaScript, или даже, хотя реже, С основана окончательный проект. Действительно вперед в финал Проект несколько этапов. Вы получили от нас письмо на днях. Поймите, что предложения это из-за предстоящий понедельник. Это не обязательно обязательным, но вы действительно должны получить свои учебные парни утверждение, прежде чем сделать любые изменения после этого. И тогда вперед являются Ряд других этапов. Таким образом, чтобы дразнить тебя, с некоторыми возможностями, у нас есть куча эти оттенок лампочки. И некоторые из вас, ребята, теперь есть некоторые из них в вашей комнате в общежитии, а также. И они тоже имеют API. Так вспоминаю те двоичные луковицы недели назад, что Дэн Брэдли и Ансель Дафф создал для нас. Они использовали программный интерфейс для это лампочка, которая на данный момент подключен к электричеству а затем с помощью беспроводного подключен к небольшой вещи называется мост сюда, как маленький маршрутизатор проприетарных в этом конкретном устройстве. Но, оказывается, если я знаю, как отправить HTTP сообщения, как мы все теперь делать, Я могу отправить сообщение, как это это лампочка, чтобы включить его или выключить или сделать любое количество другие операции по нему. Обратите внимание, что это не получить, это не пост. Там еще один называется пут. Там на самом деле несколько других таких глаголов. Но обратите внимание, что есть путь там, слэш API, слэш нового разработчика, слэш свет, слэш один, слэш состояние. Это, по-видимому просто Путь, что компания, Philips, решил вы должны ударить с просьбой HTTP если вы хотите, чтобы изменить состояние колбы с использованием HTTP 1.1. Тогда обратите внимание на пустую строку. А потом, наконец, то, что выглядит как вид на массив какой-то, Это опять-таки будет называться JavaScript Object Notation, или Джейсон. И то, что вы видите здесь является то, что Есть три пары ключ-значение. Один ключ называется на. И его значение по-видимому, будет верно. Яркость составляет 128, который это своего рода междунар. А потом время перехода нулю, что, по-видимому как долго он собирается принять, чтобы превратить эту вещь на. Так что сейчас это лампочка не горит. Но если бы я делать то, this-- пусть мне пойти в небольшой шпаргалку что Дэн создана в advance-- и я собираюсь идти вперед и скопировать следующая команда. Curl, как некоторые из вас возможно, почерпнутые на CS50 Обсудить это утилита, как Telnet такой что вы можете моделировать HTTP запросы, специально ставит. Я могу отправить эти данные, что конкретно мы просто увидел минуту назад специально по следующему адресу здесь. А потом Curl собирается обращаться все необходимые заголовки и разбор там из. Так что все что мне нужно сделать, это скопировать это в окно терминала, а затем нажмите Ввод. И лампочка продолжается. И это все происходит через мой компьютер по беспроводной сети как-то вниз к мосту, который Затем разговор на эту лампочку. Я могу сделать что-то еще. Я могу сделать эту вещь перейти красный например. Я могу, например, сделать эта вещь пойти зеленый. Я могу сделать его синим. И заметьте, в каждом из них случаи, все, что я меняю является так называемая значение оттенка для на самом деле дать ему немного цвета. Итак, позвольте мне вставить этот, как хорошо. Теперь он голубой. И вы можете сделать даже любитель вещи where-- пойдем на зеленый. И я мог бы сделать это из Конечно, с моей кода. Но даже сам API поддерживает разные операции как это, которые будут теперь беспокоить нам в течение следующих 30 секунд. Так вот один вкус того, что вы могли бы сделать с API, это один участием лампочки. Обратите внимание, что CS50 имеет несколько пары Google Glass, если бы ты хотели затронуть что-то вместе эти строки, Arduino Unos, которые являются крошечные компьютеры, по сути, на небольшой печатной плате что вы можете подключить провода и другие вещи чтобы и на самом деле контроль Ваш реальный мир среда. А еще есть пара из новых игрушек, которые у нас есть. Это один буквально только что прибыл На днях по почте, Мио повязки. И я подумал, что это способ вам рады о проектах что вы могли бы использовать с это оборудование будет быть играть в эту короткий клип что они используют, чтобы дразнить людей что мы сейчас живем в будущем. [Музыка, играющая] DAVID Маланом: Так в течение нескольких недель, вы тоже может быть, что здорово в CS50 ярмарке. Еще одно устройство, что мы есть куча, что мы рад взаймы для проектов называется контроллер движения. Это небольшое устройство USB подключении к компьютеру, позволяет вам взаимодействовать с Ваш ноутбук, Mac или PC, как будто вы были, как Xbox Kinect и на самом деле сделать физические движения гораздо как мы видим, в этом видение будущего. [Музыка, играющая] DAVID Маланом: Так что даже если у вас есть не знаю, как что-то подобное могло быть изобретено или работа на аппаратном уровне, независимо от того,. Даже после того, как несколько месяцев CS50, и понимание программирования в более общем, и веб-программирование более Недавно, а затем и API-интерфейсы, и HTTP, Вы будете иметь доступ через программные интерфейсы API, если вас хочу взять один из них Устройства на самом деле поговорить с ним и не придется беспокоиться о Лежащая в основе реализация Детали, которые полностью в соответствии с этой понятия слоев абстракция, что мы видел в течение семестра. Так же в минувшие выходные, видел пару кусочков новостей. Перейти сначала перейдите на семинарах, если вас хотелось бы узнать что-то больше на любое количество вопросов. Смотрите URL там. И этот был отправлен мне Чангом, который вы знаете, кто печати нашу армию слонов. И это был заголовок следующим образом. Я в ужасе от моего нового телевизора. Почему я боюсь, чтобы превратить это вещь, и вы бы тоже. Так что мы сейчас в указать в семестр, тоже, где, даже если у вас есть малейшего понимания о том, как работает веб, и HTTP, и безопасности, такие вещи, как это должны начать, бросаются в глаза. Но также, вы поймете, являются ли эти вещи или нет реальные угрозы. Так что я взял несколько выдержек из этой статьи здесь. А история такова. Я сейчас владелец Новый Smart TV, которая обещает доставить потоковое мультимедийный контент, игры, приложения, социальные медиа, и Интернет просмотр, ой, и телевидение тоже. Единственная проблема заключается в том, что я сейчас боюсь его использовать, считает автор. Вы бы тоже, если вы прочитали 46 страница политика конфиденциальности для телевизора. Количество данных этой вещь собирает ошеломляет. Он регистрирует, где, когда, как, и как долго вы планируете использовать телевизор. Он устанавливает отслеживание печенье, как мы уже обсуждали, и маяки разработан чтобы определить, когда у вас есть рассматривается частности содержание или конкретное сообщение по электронной почте если вы хотите, чтобы проверить электронную почту на экране телевизора. Он записывает приложения, вы использовать, веб-сайты, которые вы посещаете, и как вы взаимодействуете с содержанием, делать все, что через ваш смарт-ТВ. Он также, жутким yet-- это моя addition-- имеет встроенную камеру с распознавания лиц. Цель состоит в том, чтобы обеспечить контроль жест для телевизора и позволит вам войти в персонализированные счета, используя ваше лицо. На верху, образы сохраняется на экране телевизора, а не загружено к корпоративному серверу. С другой стороны, интернет- Подключение делает весь телевизор уязвимы для хакеров, которые продемонстрировали способность чтобы получить полный контроль над машиной. Больше беспокойства, как будто это не было достаточно умны, это микрофон. Телевизор отличается голос Функция распознавания что позволяет зрителям управлять экран с помощью голосовых команд. Но обслуживание поставляется с а зловещее предупреждение. Помните, что если Ваши произнесенные слова относятся личные или другой конфиденциальной Информация, что информация будет среди данных, захваченных и передается третьему лицу. Есть что? Не сказать, личный или чувствительной материал перед вашим телевизором. Так что это на самом деле по-настоящему. И трудно не увидеть, если вас перейти к Best Buy и т.п. для телевизоров в эти дни. Они все умные в некотором роде. И они получают умнее и жутким. И они просто сбор данных таким образом, что мы говорили о а затем загрузить его через HTTP или некоторые другие протокол в какой-то сервер. Так что это было забавной статье в этой онлайн-сайт здесь, которые говорили о частности ошибка или ошибаюсь код что мы можем на самом деле связать в дискуссии на прошлой неделе. Так этот заголовок был, как следует, история идет здесь, Джош Breckman работал Компания, которая приземлилась контракт разработать управление контентом Система, или CMS, как они называются, для достаточно большого сайте правительства. Большая часть проекта участвует разработка системы управления контентом так что сотрудники будут возможность создавать и поддерживать постоянно меняется Содержание для своего сайта. Дела пошли очень хорошо для через несколько дней после будет жить. Но на шестой день, дела пошли не так хорошо. Все содержание по Сайт полностью исчез. И все страницы привел к дефолту, введите контента веб-страницы. Упс. Джош был призван, чтобы исследовать и заметил что один особенно хлопотно Внешний IP адрес был вошел и удаляются все Содержание в системе. IP-адрес не принадлежит в какой-то зарубежной хакерской согнутой на уничтожение полезными Правительство информация. Это решение о googlebot.com, Собственный веб-ползет паук Google,. Упс. После небольшого исследования и карабкаться вокруг, чтобы найти noncorrupt резервного копирования, Джош нашел проблему. Пользователь скопировал и вставил некоторый контент из одного страницы на другую, в том числе Изменить гиперссылку редактировать содержимое страницы. Как правило, это не будет Вопрос так внешнего пользователя будет необходимо ввести имя и пароль, но система аутентификации CMS, Войти система, не учитывать сложный взлом методы Google Паук. Упс. Как выясняется, Google Паук не использовать печенье, а это значит, что он может легко обойти проверку на регистрируется на печенья набор ложными. Он также не обратить внимание на JavaScript, который будет нормально подскажите и перенаправлять пользователей которые не вошли в систему. Она тем не менее следовать каждый гиперссылка на каждой странице он находит, в том числе с Удалить страницу в названии. Упс. Так что же это означает в более технические, но довольно доступные условия? Это просто означает, что на протяжении всей их веб-сайте, они имели URL, не в отличие от этого, что Вы могли бы видеть в проблему установить семь. Напомним, в задачи установить семь или знать проблемы установите семь что вы бросили вызов, среди прочего, продавать акции от имени пользователей. Но реализации этого функцию по пути из получаете через гиперссылки в вашем пользователь Интерфейс, вероятно, не самый умный идея потому что если ваш сайт каким-то образом доступны либо человеком кто нажав вокруг или купить бот, как Google, или паук как они называются, что это просто сканирования Интернета, пытаясь индекса Веб в качестве поисковой системы, они могли очень легко ударил через получить этот вид URL. И это функционально эквивалентно, в данном случае, продажа всех акций Google. Теперь, честно говоря, это полностью ослиный, что CMS б JavaScript и печенье реализовать свою систему входа и не делает, что на стороне сервера, а Вы, ребята, и будет в Pset 7-- есть login.php file-- всегда, всегда, всегда безопасность должна быть сделано на стороне сервера, не на стороне клиента, потому что, как это Статья предполагает и вы могли бы себя см в какой-то момент, это тривиально для пользователя, хорошо это или плохо, чтобы просто выключить JavaScript не говоря уже о печенье. Так что это ваша ежедневная WTF. Там еще один, который это просто какая-то страшная, так что я буду говорить об этом, если только как урок жизни. Всякий раз, когда вы используете приложение называется как Snapchat и т.п. что говорит эти фотографии только в течение пять секунд, десять секунд, или еще много чего. Они эфемерны То есть абсолютно не так. Как нет никакого способа, цифровой, для реализации той или иной форме видео, или изображение, или текстовая обмена, таких что получатель на другом конце не может каким-то образом сохранить данные. В наиболее наивным образом, кто- может принять на свой телефон. И они имеют второе окно 10 в то время как, глядя на некоторые оснастке просто взять какой-то другой телефон и сфотографировать его, очевидно. Таким образом, вы можете сохранить что-то в цифровом таким образом. Некоторые из вас знают, как взять скриншоты на вашем телефоне. На самом деле, если вы не знаете, это, понять, что, по крайней мере Snapchat, и я думаю, что другие приложения в эти дни, по крайней мере, сказать вам, если получатель имеет на самом деле приняты скриншот вашего образа. Но что еще хуже, это было snappening, как кто-то придумал его недавно, где некоторые 100000 снимки были освобождены в то, что называется торрент-файл на различных веб-сайтах, в конечном счете. И эти содержали целый букет личных сообщений и постов. Оказывается большинство из них доброкачественные, так не то, что вы могли бы ожидать. Но потому, что люди были использовать веб-сайт третьей стороны, вход с их Snapchat имя пользователя и пароль, а затем сохранения всех своих снимков на этом сайте третьей стороны. И это было то, что третья сторона сайт, который был взломан, который просто имел в виду кого-то понял, как чтобы получить все 100 000 плюс этих изображений в их собственном жестком диске для последующего распределения. Честно говоря, здесь тоже, это своего рода из ослиный, что Snapchat реализована таким образом, что третья сторона может сортировать перехвата данные и что он не привязан к вашему собственное приложение работает на телефоне. Но и здесь, понимают, что они вещи не должны поймать вас врасплох, или, по крайней мере, должно быть уроком жизни здесь. Если вы хотели бы техническим Детали, пойти в тот URL есть это в сегодняшних слайдов. Ладно, какие-либо вопросы по сегодняшние уроки жизни в CS? Поверните, что от. Все, что угодно? Все, что угодно? У меня есть много людей, зарегистрировавшихся их Snapchat или что-то сейчас. Ладно, так SQL, Structured Query Language. Давайте обернуть это. А также, даже при том, мы только царапины Поверхность этого язык, мы дадим вам достаточно языка в виде Pset 7 так что вы можете решить некоторые довольно часто функциональность. Но понимаю, что есть пара вещи, которые мы не требующие от вас, но они собираются быть важно прийти окончательные проекты и, конечно, приходят делать фактическая сайты с реальных пользователей это дизайнерское решение. Получается, что в база данных MySQL, вы есть гроздья выбора, как типы данных для ваших колонок и другие вещи, но вы также должны Выбор так называемого хранения Двигатель для всех ваших данных, рода файловой системе, если вы знакомы, для всех ваших данных. Какой формат будет в конечном итоге это хранится в? И самым распространенным, пожалуй, был MyISAM и InnoDB, технические термины что мы будем заботиться о только до такой степени, что один имеет и не надо следующая особенность. Предположим, что у вас есть немного общежития холодильник. И предположим, что вы и ваши сосед по комнате, кто разделяет эту холодильник, действительно любил скажем молока. И это, по сути, как история была рассказана мне путь назад в тот день, когда я взял курс называется CS 161 Операционные системы, которые Аналогично рассматривается темой. Итак, вы получили этот холодильник. Ты из молока. И вы приходите домой, ваша соседка-х еще в классе или что-то, и вы решили, что я собираюсь выйти и получить немного молока. Таким образом, вы закрыть холодильник, блокировка комнаты в общежитии, пойти через улицу в CVS или там, где и получить в очереди, чтобы купить немного молока. Между тем, ваш сосед по комнате вернется домой от класса, попадает в комнате общежития, открывает холодильник, также понимает, ooph, мы из молока. Таким образом, он или она закрывается холодильник, а затем происходит чтобы перейти на другой CVS, которые, случается, в одном квартале от других CVS на площади, и получает в соответствии туда, чтобы получить немного молока. Сейчас, конечно, несколько минут позже, вы оба получите обратно, и худший из всех возможных Результаты случилось. У вас обоих молоко. И вы действительно не как молоко, что много. Так один из них является просто собирается портиться в какой-то момент. Так что теперь у вас есть чрезмерное количество молока в холодильнике все потому, что, почему? [Неразборчиво] DAVID Маланом: Да, вы не сделали как-то общаться друг с другом что вы получали молоко. Таким образом, в простейших способы в человеческом мире, как Вы могли бы избежать этого глупо Сценарий не происходило таких что вы только в конечном итоге с одной. Текст их, да ладно. Но как иначе? После он отмечает. DAVID Маланом: пост это к сведению. Любая форма общения что говорит ваш сосед по комнате не идут в холодильник для молока. Я собираюсь пойти пополнить самостоятельно. Таким образом, вы как-то нужно для блокировки этого ресурса. Таким образом, мы можем сделать this-- мы можем вид разрушить историю и превратиться в истории CS в результате чего думать об этом как раз как Переменная, которая хранит какую-то ценность. И прямо сейчас, ценность молока равна нулю, которые вы не хотите, чтобы ваши сосед по комнате, чтобы осмотреть эту переменную а затем принять решение его или себя в зависимости от состояния этой переменной если вы находитесь в процессе изменения состояния этой переменной. Так одним из направлений SQL, что мы дать вам в Pset 7 спецификации это один здесь. И мы не тратим огромное Количество времени говорить об этом. Но, оказывается, если вы пытаетесь купить некоторый запас в CS50 финансов что у вас уже есть некоторые акции, вам хочу быть в состоянии сделать ряд вещей мгновенно вместе. Вы хотите, чтобы иметь возможность эффективно, на высоком уровне, проверить все в порядке, если я хочу чтобы купить больше акций Free, мелкие акции, мы говорить в спецификации, Я хочу, чтобы первой проверки сколько акций у меня есть. И полагаю, что это пять. И предположим, что я хочу, чтобы купить более 10, я в конечном итоге хочу иметь 15 акциями. Так что у меня два вопроса. Что государство переменной? Что состояние подряд? Сколько акций я могу себе иметь? Тогда вы хотите, чтобы идти вперед и обновлять его. Так вот аналог молоко в том, что вы проверить строку, а затем вы хотите обновить его потому что, если вы хотите купить 10 акций, Вы не хотите, чтобы изменить строка 10, вы хотите изменить его на 5 плюс 10 или, конечно, 15. Эта строка кода гарантирует, что эти два концептуальные идеи произойдет вместе или нет вообще. Никто, в том числе какой-то другой пользователь кто вошел в ту же веб-сайте, может как-то прервать проверка строки и обновление строки, выбрать и обновление, если хотите. И синтаксис не супер очевидно, но это одна строка, долго это, гарантирует, что эти две операции проверить переменную или проверить строку и обновить ряд случиться атомно. О, здесь мы идем снова. Текстовое сообщение на моем телефоне. Так давайте сделаем это немного более конкретными. Предположим, что вы не реализации холодильник, и вы не реализации Pset 7, но фактическая банк, или ATM, Automated Teller Машина, в котором вы каким-то образом хочу, чтобы иметь возможность для расширения возможностей пользователям передавать деньги с одного счета на другой. ОК, держись. Я собираюсь отключить это сейчас, спасибо. Поэтому мы хотим, чтобы перевести деньги с одного номера счета в другой учетной записи число, в частности, $ 100. Так что это своего рода произвольное пример, в котором вы, банкомат, возможно, захотите выполнить два SQL запросы, вычесть из одной учетной записи, и добавить в другой учетной записи. Но вы хотите, чтобы убедиться, что эти две линии и произойдет или не на всех. Вы что-то не хочу получение прерывается. Вы не одни умные плохой парень как-то стоял в Банке Америки с двумя банкоматов в передней из него и как-то рода набрав в команды, в то же время, надеюсь, пытаясь удержать $ 200 вместо $ 100 и только имея $ 100 кредитуется. Короче говоря, вы хотите, чтобы это ведут себя именно так, как вы ожидаете. И то, как вы делаете это в SQL база данных Вы оберните его в то, что называется сделка. Буквально в SQL, вы можете позвонить CS50-х Функция запроса с цитатой конец цитаты начала Сделка. Тогда вы можете выполнить любое количество из последующих запросов SQL, но ни один из них не принимать влияет на базе до вызова запроса цитата конец цитаты совершить, если еще раз, используя PHP. И таким образом, вы можете быть уверены, что даже если у вас есть 1000 пользователей все попав базы данных в то же время, SQL- обещаю, что это два запроса будет реализован один за другим. Таким образом, вы не в конечном итоге с избытком молоко или неправильный размер, в итоге, денег. Так что имейте это в виду, не столько для Pset 7 но для окончательных проектов если вы на самом деле пытаются перемещать данные по таблицам, как вы могли бы здесь. Но, пожалуй, еще более простой и более Очевидно, чтобы понять, с примера это один здесь. А кто-то по электронной почте нам о это только на днях когда он увидел что-то подобное в Интернете. Так, насколько мне известно, в контактном системы не подвержены этой атаке. И я понятия не имею, если он даже использует база данных SQL под капотом. Но давайте использовать его для ради обсуждения. Вот экран, что Гарвардский люди, как правило, чтобы увидеть при входе в систему с Гарвардский идентификационный номер и их контактный. И полагаю, что штифт система были реализованы в PHP и с MySQL базы данных, код, который кто- возможно, написанные лет назад может выглядеть следующим образом. Во-первых, объявить Переменная называется имя пользователя. И просто получить, что из POST суперглобальная. Тогда получите еще одну переменную называется пароль и сделать то же самое. А потом просто выполнить это долго запрос здесь, выберите звезда из пользователей, где Имя пользователя равен такой- и пароль равна такой-то. Обратите внимание, что вьющиеся брекеты я использовал здесь просто имею в виду, чтобы PHP, идут вперед и заменить значение этих двух Переменные прямо там. Они не обязательно, но они, как правило, чтобы избежать тонкие синтаксические ошибки. Так это выглядит полностью правильно на первый взгляд. И это. Вы могли бы реализовать Система контактный таким образом. Но предположим, что супер умный и злой студент вход это как своего пальца. Так я удалил пулю знаки здесь, в макете, и я на самом деле показал, то, что он или она может быть набрав. И это немного странно. Но то, что выскакивает в Вас на потенциально беспокойство о входе пользователя, даже если вы понятия не имеете, что Нападение инъекции SQL означает. Почему это выглядит немного подозрительно? Что это? [Неразборчиво] DAVID Маланом: или немного подозрительным. На самом деле, это ключевое слово из SQL. Так что не сулит ничего хорошего. Дело в том, что есть все эти одиночные кавычки there-- на самом деле, один из самых простых способы сломать некоторые базы данных это, набрав в имени, как O'Reilly что имеет апостроф в него потому что, если человек, который написал код за кулисами не принимать во внимание, что может быть одинарные кавычки в пользователя вход, и он или она использует одинарные кавычки в своем коде, плохие вещи могут случиться. На самом деле, что еще хуже, рассмотреть этот вопрос. Если бы это было снова код что кто-то в Гарварде лет назад написал для штифта Система, обратите внимание, что это собирается получить замещенных имя пользователя и пароль Если пользователь снова skroob как их имя пользователя а затем один, два, три, четыре, пять, цитата или цитата конец цитаты одного равных процитировать один. И обратите внимание, что ключ Здесь пользователь не начал свой пароль или их контактный с цитатой. И они не закончились его с цитаты, потому что он или она при условии, что, если программист не был таким острым, они будут иметь те, одинарные кавычки в своем коде. Так вот код. И замена, что может сейчас произойти это. И я подчеркнул, что пользователь ввел в. Поэтому, прежде чем, после. И обратите внимание, что мягко беспокойство сейчас о правой половине этого SQL кода? Это немного более сложным, по общему признанию, чем запросов мы видели. Но это не может быть хорошо, если вы говоря выберите звезду, которая выберите все со стола пользователя где имя пользователя равен skroob и пароль равен один, два, три, четыре, пять или один равняется один. Что логическое следствие этого последнего пункта предположительно? Это просто всегда верно. И потому, что мы-то догадался или выяснили методом проб и ошибок что программист, который написал этот код не сделал предвидеть человеческую или плохой человек набрав в одинарные кавычки, а, мы можем синтаксически завершить SQL-запрос с чем-то бессмысленный но что-то, что синтаксически неверно что всегда истинен. Так что, если этот код используется для ответа вопрос истинными или ложными должны этот пользователь будет разрешено пройти, Ответ всегда, видимо, собирается чтобы быть правдой, потому что это всегда будет выбрать что-то из базы данных потому что один, конечно, всегда равна единице. Так в чем же решение? Ну в Pset 7, мы на самом деле Во избежание этого все вместе. Мы даем вам функцию запроса, и мы рекомендуем вам использовать вопросительные знаки в качестве заполнителей, аналогичны по духу PRINTF в% х, но то, что ключ о вопросительных знаков вот если вы на самом деле прочитать functions.php, где наш Функция запроса будет реализован, эти знаки вопроса спасшиеся, чего-нибудь потенциально опасным как апостроф включен в сбежавшего одной цитатой. Так что это то, что на самом деле происходит, если вас использовать функцию запроса CS50 или любое количество из сторонних бесплатных библиотек, которые сделать то же самое. Не имеет значения, в данном случае, в зеленый, если пользователь ввел в одной цитатой потому что в запросе функция, которую мы написали, собираемся добавить обратную косую черту перед любая такая опасная цитата. Так что это не так, в Дело в том, будет законным. Это как набрав в сумасшедший смотрит пароль это, конечно, не собираюсь быть актуальной пароль skroob игровая. Так вынос для CS50 является одним, абсолютно всегда использовать что-то как функции запроса CS50 в или основная библиотека, которые, случается, называют PDO. Но никогда, никогда, никогда не такой код без побега или очистки как говорится ваши входы. И вы в какой-то момент, вероятно, попадаются каком-то сайте, как это. На самом деле, это, кажется, дело как в аэропортах и ​​отелях мест где у них есть бесплатный Wi-Fi Доступ что у вас есть, чтобы войти в, эти веб-сайты всегда ужасно реализован. И так-то весело дома упражнения, не в злонамеренных целях или более из удовольствия на дороге упражнения, это просто наберите апостроф, апостроф, в форме на каком-то сайте и посмотреть, что происходит. И если сервер выходит из строя или дает Вы какой-то сообщение об ошибке, очень может быть, что кто-то не ожидал этого. И тогда вы должны предупредить надлежащее Власти и не перейти дальше. Так что теперь вы, ребята, должны, мы надеемся, понять немного больше выродка юмор здесь. [Смех] DAVID Маланом: Вы знаете, вы выродок. В течение следующих нескольких лет, вы будете помнить кто мало Бобби Столы является из-за этого мультфильма здесь. Так что имейте это в виду, как мы переключение контекста в последний раз сегодня в JavaScript. Мы провели довольно мало Время от синтаксиса PHP потому что это на самом деле супер похож на C. И достаточно хорошо, JavaScript слишком супер похож на синтаксис языка C а также мы увидим в только на мгновение, и как мы будем см в конце этой недели, в частности. Что вы можете сделать с этим языком, хотя, тем более мощным, особенно с API. Но сначала краткий тур. Так что, в JavaScript, есть нет Основная функция, которая хороша. Как с PHP, вы можете просто написать код. Условия выглядеть следующим образом. И логические выражения может выглядеть так или так. Существуют переключатели, и они может выглядеть следующим образом. Четыре петли выглядеть следующим образом. В то время как петли выглядеть следующим образом. У whiles выглядеть следующим образом. А потом массивы похожи это, очень похожа на РНР. Но заметим, что в JavaScript тебя объявить переменную не с долларом подписать, не с типом данных, но буквально говоря вар для переменной перед ней. Это слишком свободно набрали в том, что он имеет виды, но вы явно не объявлять их. И тогда строка, для Экземпляр, может выглядеть как это, что строка называют ы в этом случае. И затем объект. И это мы увидим больше в ближайшее время. И объект, пожалуй, один из Наиболее часто встречаются структуры данных в JavaScript на основе Программа так как он позволяет связать произвольное пар ключ-значение только как ассоциативные массивы в PHP и так же, как свой собственный хэш-таблице или попробовать как мы внедрили несколько недель назад. Так что давайте на самом деле увидеть, что мы можем сделать с помощью JavaScript. И, в частности, это длинный список функций что браузеры имеют, что позволяют подключить JavaScript в веб-сайт следующим образом. JavaScript часто используется в качестве на стороне клиента скриптовый язык. Это не составлен. Это тоже интерпретируется. Но в отличие от PHP, который работает уже на сервере, на веб-сервере, или глубоко внутри Клиенты, JavaScript отличается тем, что она как правило, проходит в браузере. Таким образом, любой код JavaScript вы начать писать для Pset 8 или вашего окончательного проекта, или в реальном мире, как правило, происходит быть сохранен на сервере, абсолютно в дот HTML или точкой JS для файла JavaScript. Но браузер собирается скачать что JavaScript Код для вашего собственного экземпляра Chrome, или IE, или Firefox, или что-то. И код на самом деле происходит, чтобы получить выполняется внутри вашего собственного браузера. Просто, чтобы сделать это более реально, давайте посмотрим это в конкретной форме. Мы понятия не имеем, что делает этот код на самом деле не читал через него. Но позвольте мне перейти к Facebook.com без регистрации. Позвольте мне пойти в Осмотрите элемент и идти, скажем, сети и перезагрузите страницу. И мы будем see-- позвольте мне перейти Обновить Страница, чтобы получить все запросы на новый. И самый первый Файл я вижу, CSS, CSS. Вот первый JavaScript-файл, и у меня есть никакая идея, что это делает, но здесь некоторые из кода JavaScript что приводит Facebook. Это даже не действительно, что выявление, чтобы увеличить. Это по-прежнему так же, как бессмысленно. Но вы увидите, даже внизу, есть еще более из этих файлов JavaScript. Упс. Вот пинг. Пойдем немного Кроме того, дополнительно, в дальнейшем. Там один. Там один. Там один. Таким образом, даже при том, что Facebook, за сцены, написано в части в PHP и Facebook, собственную версию его, есть огромное количество JavaScript. На самом деле, любой из в чате вы делаете на Facebook, любое из обновлений встроенного даты жизни что происходит в реальном времени, все, что приводится в движение JavaScript. Да? АУДИТОРИЯ: Я не уверен, если это Facebook, но я думал, что Facebook разработал их собственный внутренний код языка? DAVID Маланом: Они сделали. Так вот почему я говорю, дисперсию PHP называется хип-хоп, что они на самом деле дополнительные функции для таких, что при Марк впервые реализована Facebook, она была написана в PHP. И что-то осталось рода переднего конца языке что они используют для гораздо их кодирования, но это не был язык это весы особенно хорошо для миллиардов людей. И таким образом, они добавили свои собственные Улучшения за кулисами. И они использовать любое количество других языках для различных кусков их инфраструктуры. Так что, да, это дисперсия то, что мы теперь знаем, как PHP. Итак, давайте взглянем на пару примеров о том, как мы могли бы использовать JavaScript здесь. В современном исходного кода, у нас есть куча файлов, первый из которых, давайте называется DOM нулю. Так DOM ноль выглядит следующим образом. Отпусти меня в этот каталог и открыть domzero.html, верхняя из которых имеет тип DOC Декларация, говоря здесь приходит HTML 5. А теперь вот HTML тегов. Вот глава тег. А вот что нового сегодня. Теперь у нас есть тег сценария внутри главы странице. И это, по-видимому делает очень мало, но уведомление что я определил Сценарий, JavaScript. И, как в сторону, так как это Широко распространено заблуждение,, JavaScript не имеет абсолютно ничего делать с Java, языке что некоторые из вас, возможно, узнали в АСУ ТП. Это было больше маркетинга вещь, чем что-либо, езда на фалды Java лет назад. Но наличие ничего не делать с Java, просто так же, и досадно, смешения имени. Так вот как вы объявляете функцию в JavaScript, буквально сказать, функцию, то имя функции, то любой аргументы он может предпринять, точно так же как в PHP. Оказывается в JavaScript, одним из самых раздражающие функции, которые существуют в оповещения. Это небольшое окно, что всплывет и предупредить вас в какой-то части информации. Это правило, с неодобрением. Но мы будем использовать его в качестве нашего Первое упражнение здесь. Обратите внимание на некоторые особенности JavaScript. Одиночные и двойные кавычки на самом деле не имеет никакого значения. Одиночные кавычки и двойные Котировки могут быть взаимозаменяемыми, в то время как в C, вы должны использовать двойные кавычки для строк, и у вас есть два один котировки для символов. В мире JavaScript, многие люди, большинство людей использовать одинарные кавычки строк просто потому, что это стилистическое вещь. Но то, что оператор плюс здесь, которые мы раньше не видели? АУДИТОРИЯ: Сцепление. DAVID Маланом: Сцепление. Так C даже не в этом. PHP имеет оператора точки, который делает это. JavaScript имеет оператор плюс, который смешения является так же, как Java. Теперь то, что здесь происходит? Так вот, где базовый понимание этой картины мы подбросил пару дней назад вступает в игру. Помните, когда у нас был простой версия HTML page-- он просто сказал, привет мир. А потом мы рисовали дерево справа, который была куча прямоугольников и линий соединяя их, как родословной. Так вот так называемое DOM или объектной модели документов. И получается, что вы можете получить доступ к прямоугольники в этом дереве с синтаксисом как в следующем. Вы в буквальном смысле говорят документ, который является специальная глобальная переменная в JavaScript программа, которая имеет функцию связано с тем, что вы можете получить доступ к похоже на структуру, но вы просто говорят точку, а затем имя функции, получить элемент по ID. Элемент я хочу получить это по-видимому, цитирую конец цитаты имя. А потом я хочу, чтобы получить его значение. Теперь мы забегаем вперед. Я даже не уверен, что Все это о. Давайте перенесемся в HTML на страница, которая является супер просто. Обратите внимание, что я определил образуют здесь. Обратите внимание, что я дал ему уникальный ID, даже если мы не использовали этот атрибут прежде. Но это существует в HTML. Вы можете однозначно идентифицировать некоторое кусок из HTML с идентификатором, как это. Теперь обратите внимание this-- оказывается HTML поддерживает, в этом списке белья Минуту назад, в целом куча обработчиков событий. И это обработчик событий говорит о представить. На представлении пользователя этого форма, называют следующий код. И код, который собирается назвать или выполнены именно это, греческий Функция следуют вернуться ложным. Все остальное должно быть довольно знакомы. Здесь ввод текста типа, чьи ID, в этом случае, будет имя. У нас нет фактического имя атрибута это time-- и кнопку нажать кнопку. Так в результате страница выглядит следующим образом. И в результате поведения, Вы увидите, выглядит следующим образом. На странице Местное хозяева говорит, привет Дэвид, вряд ли эстетично способ приветствовать пользователя. Но что происходит на самом деле? Ну, подумайте, что это. Это текстовое поле. И в соответствии с HTML здесь, я дал его Уникальный идентификатор называется цитата конец цитаты имя. Между тем, я уже говорил, когда пользователь отправляет эту форму нажав Enter или нажав Отправить Кнопка, вызвать функцию под названием Приветствуйте а затем вернуться False. Давайте рассмотрим те в обратном направлении. Обратите внимание, когда я нажмите Отправить, Адрес этой страницы не изменяется. Значок браузера не начинают крутиться. Я никуда не ходил, и это буквально, потому что я сказал, вернуться False. Вернуться ложным коротких замыканий или остановки поведение по умолчанию в форме. Так что тогда у нас остается это один последний вопрос. Что Приветствуйте делать? Ну, Приветствуйте видимо, вызывает функцию под названием Оповещение, проходит в одном долго аргумент, что это результатом соединения вместе куча подстрок, привет запятая пространство, затем все это возвращается. Так документ как глобальная Переменная для этого корня этого дерева, вызове специальной функции, в противном случае теперь известно как метод. Функция это внутри переменная называется функцией метод вместо. Так что элемент по ID. Что элементом сделать вас хотите получить его ID? Цитировать конец цитаты имя и Затем специально ценим. Итак, другими словами, что код просто находит текстовое поле, ID является имя а затем получает свое значение. Так что, если бы я это изменить и сказать Дэвин вместо Давида, и нажмите Добавить, сейчас мы есть приветствие для Дэвин. Ладно, так что все прекрасно и замечательно. Но давайте посмотрим, если мы можем сделать это немного чище, так как только написания кода, как это как правило, будет с неодобрением. Это будет выглядеть страшнее. Но то, что первый Разница, что вы обратите внимание, здесь В этом варианте, кроме назвать изменения в DOM один? Что структурно выглядит по-другому Об этом в сравнении с другой? Да? АУДИТОРИЯ: Является ли форма на Верхняя часть сценария сейчас? DAVID Маланом: Да, форма находится на вершине сценария для какой-то странной причине. Так что первое, что что выскакивает на меня, тоже. И, к счастью, по крайней мере, Эта часть идентична. Так что единственное, что кажется будет отличаться это. Так вот то, что опрятно о JavaScript 2. И это делает его трудно понять на первый взгляд, особенно для конечных проектов, если Вы смотрите на образец кода на сайте, но это сводится к некоторым Основные синтаксические особенности. Здесь опять-таки, что Глобальная переменная документ. Здесь опять-таки, что метод или функция что говорит получить элемент по ID. На этот раз я хочу получить идентификатор, называемый демо. Где это? Это, по-видимому право здесь, сама форма. А теперь обратите внимание, что, по-видимому, если бы я вернуться к этому узлу в дереве, что представляет собой форму Сам, не текстовое поле, Оказывается, что форма, что узел или прямоугольник с дерева, есть то, что мы называем свойство, очень, очень, очень похожи по духу структуре в С. Это просто член данные внутри этого прямоугольника. Так что я получил форму здесь, и я есть, или я задаю, чтобы его на Отправить обработчик вернее На Разместить недвижимость Следующая функция. И это, безусловно, самая сумасшедшая вещь до сих пор синтаксически. Оказывается в JavaScript и в PHP, и, честно говоря уж на то пошло в C, даже если мы этого не делают, вы можете добавить безымянный, анонимный или AKA лямбда Функции, которые не имеют имени но может быть вызван тем не менее. Так, что я делаю здесь я задаю это на Предложить объект недвижимости, который находится внутри этого узла моего DOM дерева, Функция, указатель на функцию, если хотите. не что функция не имеет назвать, но это не значения, потому что мы будем видеть в минуту, как это назвать. Когда эта функция вызывается, этот код запускается на выполнение, то возвращается ложь, как и прежде. Но обратите внимание, что я сделал. На данный момент в История, у меня есть форма. У этого есть уникальный идентификатор, называемый демо. Здесь, внизу, у меня есть тег сценария который выполняет следующий код. Он прикрепляется к этому узлу в дерево, чтобы он находится на Отправить недвижимость эта функция здесь. И только по характеру, как браузеры работают, когда я теперь нажмите кнопку Отправить или нажмите Enter, что функция будет дозвонились. Это не нужно имя, потому что кто чёрта заботится, как это называется. Единственный раз, когда он когда-нибудь, чтобы получить называется то, когда я отправить форму. Там нет необходимости для меня, человек-разработчик, на самом деле назвать это где-нибудь еще. Теперь же, как задира, как будто что не были против, изгиб достаточно, мы можем даже сделать это выглядят более загадочным помощью супер популярной библиотеки называется JQuery. На самом деле JQuery и JavaScript нередко объединяются. И что мы будем делать в среду является начало с помощью этого языка и эти библиотеки построить более асинхронный и динамические приложения как карта становится приложения, приложения что обновлять веб-страницу в режиме реального Время, как и Facebook или Gchat сделать, и больше не ограничиваемся попав Отправить по GET или просто пост в одиночку. Так что я буду видеть вас в среду. [Музыка, играющая]