>> [音乐播放]
>> DAVID马兰：这是CS 50，并且 这是9周的开始。
而我们认为我们今天会做不 只有关闭在上周的一章
材料，我们专注于服务器 端Web编程的PHP和SQL，
一些数据库的东西。
我们将谈论了一下 今天的安全性，然后
过渡到客户端编程 语言称为JavaScript的。
但首先，一些赎回。
>> 你可能还记得，上 周三，我设置了
写一个网站， 把用户的输入
通过HTML表单是将存储 该用户输入的姓名，电话
号，以及手机 载流子在数据库中。
然后我有一个小命令 行的脚本编写PHP
这本来是要遍历 在数据库中的行
并发送短信。
尽管几次，多次尝试，我们 没有得到该工作的结束。
>> 所以，我这整个星期花在工作 对这些代码让我们过去点
在我们离开的，即所有的 我得到了周三的结束
是这样的短信 从马戈我挣扎着，
接着从另一个文本消息 同学，你有这个大卫。
其次是这一个， 奇妙的鼓励。
保持下去，非常振奋人心。
我几乎得到了它，直到then--和 这就是我们最终在周三的说明。
然后其实也许是我的最爱， 片刻之后，该走了进来。
该死的实时流。
>> 所以今天，我们解决这个问题有一个快速 看看，因为我做了什么。
因此，所有这些代码可用 在网上从上周的八周，
源代码。
你会看到，我经历了， 实际上我清理东西有点。
我介绍了几个其他 SQL数据库的功能。
例如，而不是 只是让VAR炭载体
因为我觉得上周我做的飞行。
我不是把它定义为 什么所谓的枚举。
>> 和一些你可能已经看到了这一点 当我们探讨C.枚举实际上是
了C一个功能，您可以 列举了一大堆常量
并为它们分配的自动值， 像的一个，两个，三个，四个
而无需硬码号。
因此SQL支持相同的，由此，如果 你有一个数据库字段，你只
要采取有限1 值，你可以从字面上指定它
因为我已经四年没有做过 热门美手机运营商。
>> 所以我这样做。
我做了一些改动，作为 好了，其中最重要的
是让电子邮件，因为召回工作， 这个程序依赖于它
一般称为电子邮件至 短信网关，这就是
中说，Verizon公司看中路， AT＆T和其他人支持的服务器，
如果它接收到，由此 电子邮件，它转换为短信
并发送一个文本 消息到别人的手机上。
所以，如果我没有这样做， 这里是一个新的和改进的形式
这是要谈 新的和改进的代码，这
你可以在线播放。
它有望使我 手机提示音在短短的一瞬间。
>> 因此，首先，我要在我的名字输入。
第二，我不会 要做到这一点这个时间。
我会做检查元素。
而这仅仅是一个 小东西，所以我不
创建后期制作的时间 因为我做了最后一次努力。
现在有我的电话号码。
>> 我会选择Verizon公司。
在这里，让我们打开这个麦克风 在这里，这个目标在我的手机在这里。
我要去点击注册， 这应该有希望
把它放到数据库中。
现在，我会去的 命令行程序，这
回忆被称为点斜线 文本，用你的手指。
开始了。
>> [手机钟声]
>> [掌声]
DAVID马兰：所以比this--更多的乐趣 它的乐趣，当然，如果我进去了。
但它更有趣，我想，如果我们 在这些电影的时刻之一
其中相似的东西真的 糟糕的事情在世界上，
像所有的美国国家安全局的人的 手机开始发出蜂鸣声
与短信 提醒他们注意这个事实。
所以我想我们会尝试 在此重建相同，
由此不使用数据库， 我代替预先
写了一个程序，看起来像这样。
>> 这是一index.php-- 我把这段代码在线
作为well--，显然 只是呈现form.php的，
使用MVC风格的范例，我们 谈更详细的问题集
七。
这种形式是非常简单的。
这将提交给 文件通过邮寄称为here.php。
而且它显然是要问 一个名字和一个电话号码，
然后，通过所谓的 选择菜单，这是
要给你至少四 热门美手机运营商，
然后让你有效 点击这里好好听讲。
>> 而在这里，与此同时，将要 借用一些代码的最后一次。
如果你只是浏览一下， 你会看到有
一大堆错误检查。
但在美女到底是 我们今天没有写入数据库。
我们保持它简单， 刚发出希望
通过功能我一个短信 写了这几天电话
文，这是在功能。 PHP的， 这又是在网上提供。
>> 所以，如果你想在这分享。
我们不会被存储任何东西。
去这个网址这里是实时的。
不要提交，只是还没有，但我们 看看我们是否能拥有这些电影之一
瞬间，每个人的手机 会发出哔音，希望只是
在2011年与今年一次 这哪里去了可怕出错。
一旦你去这个地址， 你应该看到一个超级简单的形式
如果你有一个名字，一个手机 号，和一个蜂窝电话载波
列表中有匹配，则转到 进取，填写表格。
但是，不要点击提交，只是还没有。
>> 窗体的打算是这样的。
来吧，键入 您的姓名，电话号码。
空中接力，一个人是怎么回事遥遥领先。
没关系。
OK，每个人都填写了表格。
这应该工作在 手机也一样，如果你想要的。
好吧，在你的痕迹，被置，走了。
打到这里。
什么？
号
我向上帝发誓，我测试 这种多次至今。
你懂吗？
>> [插VOICES]
>> DAVID马兰：OK，用户错误可能。
这是两人。
它的工作有两个出了 几百年，三，四。
OK，这是很好的。
五分之四的 正确性如何。
>> 那么到底发生了什么？
因此推测，没有看到你 屏幕上，为什么它可能有误？
这可能是我们刚 试图让过多的连接
哈佛的邮件服务器全部 一旦从相同的IP地址。
我只是猜测，因为我没有 有测试的奢华
这段代码的一些 300人提前
但现在认识到， 在于，至少应
已经得到完成这次任务。
>> 好吧，那么为什么是这一切的 更有密切关系这是怎么回事？
那么首先，快速 夫妇公告。
所以一个，如果你想加入长安，和 尼克，和其他人在午餐这个星期五，
做的RSVP在通常的URL存在。
如果你正在考虑集中的 或做在CS辅助，
无论你是一个大二的学生，还是大一新生， 甚至大三或大四这一点
而且还可以挤在课程， 认识到工程学校
正在收集免费Ben和 杰里的冰淇淋和建议
本周三后不久级 下午4:00，在CS建设
在麦克斯韦德沃金。
如果这是过速 在屏幕上，只是去
以cs50.harvard.edu了 链接至Facebook活动
在这里你可以看到更多的细节。
>> 同时，我想我会改正 另一件事我疯玩周三。
原来，马克的ID 在Facebook上是不是三个。
这是4。
原来，他有更多的测试 帐户比我记得。
但是，这是什么感觉像一个机会 做的是拉这样的URL。
>> 所以，事实证明，Facebook有一个 API，应用程序编程接口，
这是一个机制，使你 可以通过编程方式请求数据
在Facebook和取回机 可读的信息，而不是网页
但只是原始的文字，一些 被称为JavaScript对象表示法。
而事实上，如果我访问这个 URL，并放大，在默认情况下，
这是马克的公开 获得的信息。
>> 而有趣的细节 这里只是他的ID
的确，排名第四，这是我 当我这样做实现。
你可以自己做，如果你知道 您的Facebook用户名，如果你有一个。
只需键入它顶在那里。
而这一切都不是私有的。
我只是在做这甚至 在隐身模式。
所以我连登录。
和你看到的是我 显然是用户数6454
在Facebook上，这是不 太糟糕了，这些天。
所以，无论如何，你还会看到 其他信息在那里。
>> 和有用的方面 那是你
可以编写自己的软件， 在某种程度上整合了这样的数据
到自己的应用程序。
您可以授权用户 登录到您的网站，
不使用自己的自定义的用户名和 密码，但也许他们的Facebook登录
和获取信息甚至 他们的朋友，
如果他们同意这样的或类似的。
因此请注意，CS50，也 有一些自身的API，
一个是课程目录数据， 对于一些在餐厅的菜单拥抱
室，所有的 建筑和地点
在校园里，我们有一个API，以及 您可以查询类似，并得到
回文本数据，你可以整合 到一个PHP或JavaScript，甚至，
虽然不常用，一 基于C的最终项目。
>> 事实上，未来的最终 项目是几个里程碑。
您从我们这里得到一个电子邮件的一天。
认识到提案 是下星期一到期。
它并不一定约束力，但你 确实需要得到你的教学研究员
制作前批准 其后任何更改。
然后前面有一个 其他里程碑的数字。
>> 因此，为了逗你，也 有一些可能性，
我们有一堆 这些色调灯泡。
而一些你们现在有一些 这些在你的宿舍里也是如此。
而且他们也有一个API。
于是想起那些二进制灯泡周 以前，丹·布拉德利和安塞尔
达夫为我们创造。
他们使用的软件界面 这个灯泡，这在目前
插入电 然后经由无线
连接到一个小东西 所谓的桥到这里，
像一个小的路由器专有 这个特定的设备。
>> 但事实证明，如果我知道如何 发送HTTP消息，因为我们现在都做，
我可以发送类似这样的消息来 这种灯泡将其打开或关闭
或做任何数量的 在其上的其他操作。
请注意，它没有得到，这不是发布。
还有另外一个叫放。
实际上，有一些其他类似的动词。
但是请注意有一个路径存在， API斜线，斜线新的开发者，
光斜线，斜线1，斜线状态。
>> 这显然​​只是 路径该公司，飞利浦，
决定你必须打 与HTTP请求
如果你想改变状态 的使用HTTP1.1的灯泡。
然后注意空行。
然后最后是什么样子 样的一些种类的阵列，
这再次将被称为 JavaScript对象表示法，或杰森。
你在这里看到的是， 有三个键值对。
>> 一个关键的要求。
和它的价值显然 将是真实的。
亮度是128，其 是某种为int。
然后过渡时间 零，这显然是
多久它会 需要把这个东西上。
>> 所以现在这种灯泡不亮。
但是，如果我做的正是让this-- 我去一点小抄
丹成立 advance--我要去
继续前进，复制 下面的命令。
卷曲，因为你们中的一些 可能收集到的CS​​50
讨论的是如Telnet这样的实用工具 你可以模拟HTTP请求，
特别提出。
我可以将此数据发送， 具体是什么，我们只是
看了刚才专门 这个网址在这里。
然后卷曲将要处理 所有必要的报头
并分析存在的。
>> 因此，所有我需要做的就是这个复制到 一个终端窗口，然后按Enter键。
和灯泡点亮。
这是所有经历 我的电脑无线
以某种方式下至桥，这 然后，谈话这个灯泡。
我可以做别的事情。
我可以做这件事 去红的实例。
我可以举例进行 这个东西走向绿色。
我可以让他走了蓝色。
>> 并注意在每个这些 情况下，所有的，我自己在改变
是所谓的色调值，以 居然给它点颜色。
因此，让我贴，以及这一个。
现在是蓝色的。
>> 你可以做的更炫 事情where--让我们去绿色。
我能做到这一点的 当然有我自己的代码。
但即使是API本身 支持时髦的操作
像这样，现在会打扰 我们在接下来的30秒。
>> 所以这是一种什么味道，你可能会 做一个API，这其中涉及到
灯泡。
注意，CS50有几个 对谷歌的玻璃，如果你想
喜欢沿着对付的东西 这些线路，Arduino的UNOS，这
在小小的电脑， 实际上，在一个小电路板
您可以连接 电线和其他东西
和实际控制 您的真实世界的环境。
然后有一对夫妇 新的玩具，我们有。
这个从字面上来乍到的 日前通过邮寄，一缪袖标。
而且我认为这是一种方法， 让你兴奋的项目
你可能会与使用 该硬件会
要玩这个短片 他们用它来捉弄人
我们现在生活在未来。
>> [音乐播放]
>> DAVID马兰：所以在短短的几个星期，你 也可以在CS50公平的凉爽。
另一种设备，我们 有一大堆的，我们是
乐意借出的项目 被称为运动控制器。
这是一个小的USB设备 在连接到计算机
让您与互动 你的笔记本电脑，Mac或PC，
就好像你有喜欢的Xbox Kinect的 而实际上使身体动作多
就像我们在此看到 对未来的看法。
>> [音乐播放]
>> DAVID马兰：所以，即使你有 不知道如何这样的事情
也可能会被发明或作品 在硬件一级，不管。
即使是CS50的短短几个月后， 和编程的理解
更一般地，和web编程更 近日，然后又API和HTTP，
你将通过访问 如果你的软件的API
也想借其中的一个 设备实际谈谈它
而不必担心 底层的实现
细节，这是完全 有层次感这一概念是一致
我们已经抽象 看到整个学期。
>> 所以也上周末， 看到一对夫妇则新闻。
先走，去讲座，如果你 想学习的东西
更在任意数量的主题。
请参阅网址那里。
而这一次被送到 我通过张，你知道是谁，
谁是我们的打印头大象的军队。
并且它是一个标题如下。
我害怕我的新电视。
为什么我害怕把这个 关于你的东西会太。
所以我们现在是在 指向学期，
过，在这里，即使你有 一丝丝的理解
如何在网上工作，和HTTP， 和安全性，这样的事情
应该开始吸引您的眼球。
但同时，你就会明白 这些东西是否是或不是
实际的威胁。
>> 所以我拍了几张摘录 从这篇文章在这里。
而这个故事如下。
我现在的老板 新的智能电视，这
承诺提供流媒体 多媒体内容，游戏，应用程序，
社交媒体和互联网 浏览了哦电视了。
唯一的问题是，我现在 害怕使用它，作者说。
你会也一样，如果你读通过 在46页的隐私政策为您的电视。
数据这一量 收集的东西是惊人的。
它记录在哪里，何时，如何，以及 您使用的电视机有多长。
它集跟踪cookie， 正如我们已经讨论过，
和信标设计 当你发现
查看特定的内容或 一个特定的电子邮件消息
如果你想在电视上查看电子邮件。
它记录了你的应用程序 使用，您访问的网站，
以及如何与内容互动， 通过您的智能电视做了这一切。
同时，creepier yet-- 这是我的addition--
有一个内置的摄像头 面部识别。
>> 的目的是提供一种 手势控制电视
并让您登录 个人账户使用你的脸。
从正面看，该图像 保存在电视上，而不是上传
到企业服务器。
在缺点方面，互联网 连接使得整个电视
容易受到黑客谁 已经证明的能力
取机器的完全控制。
>> 更令人不安的是，仿佛那不是 足够聪明，是麦克风。
电视拥有语音 识别功能
这让观众控制 屏幕使用语音命令。
但服务自带 一个相当不祥的警告。
请注意，如果 你说的话，包括
个人信息或其他敏感 信息，该信息
将捕获的数据中 并传输到第三方。
明白了吗？
不要说个人或敏感 东西在你的电视机前。
>> 因此，这实际上是真实的。
它很难不，如果你看到 去百思买等，用于电视
这些日子。
他们都是聪明的以某种方式。
而他们得到的 更智能，creepier。
他们只是简单地收集数据 在我们谈论如何
然后通过HTTP或上传它 其他一些协议的一些服务器。
>> 因此，这是一个有趣的物品 在这个在线网站
在这里，里面讲到一个 尤其错误或错误的代码
我们实际上可以配合 到上周的讨论。
所以这个标题是因为 下面，故事到这里，
乔希Breckman工作了 公司得到了一个合同
开发一个内容管理 系统或CMS，因为他们是所谓的，
在相当大的政府网站。
多参与该项目的 开发一个内容管理系统
使员工会 能够建立和维护
不断变化的 他们的网站内容。
事情进展得很不错 上线后数天。
但在6天里，一切都很不那么好。
所有的内容 网站已经完全消失了。
和所有网页导致了默认， 请输入内容的网页。
哎呦。
乔希被称为中 调查发现
一个特别麻烦 外部IP地址了
走在并删除所有的 系统上的内容。
>> IP地址不属于 一些国外黑客弯曲
对破坏有益 政府信息。
它决心googlebot.com， 谷歌公司自己的网页抓取蜘蛛。
哎呦。
经过一番研究和扰 四处打听一个noncorrupt备份，
乔希发现问题。
>> 用户已复制 粘贴从一个有些内容
页面转到另一个页面，其中包括 在编辑超链接
编辑网页上的内容。
通常这不是一个 由于外部用户问题会
需要输入用户名和密码， 但在CMS认证系统中，
登录系统， 没有考虑到
成熟的黑客 谷歌蜘蛛的技巧。
哎呦。
>> 事实证明，谷歌 蜘蛛不使用
饼干，这意味着它可以 轻松地绕过了检查
登录cookie的设置是错误的。
它也不会留意 JavaScript中，这通常
提示和重定向用户 未登录谁英寸
但它确实遵循每 每一个超链接找到网页上，
包括那些具有 删除页面的标题。
哎呦。
>> 那么，这是否意味着更多的 技术问题，而是相当接近条款？
它只是意味着， 在他们的网站上，
他们的网址并不像这一个 您可能会看到在问题设置7。
召回问题集7 或者知道问题集7
你所遇到的挑战， 除其他事项外，
以代表用户的抛售股票。
但是，实施该功能通过方式 通过在用户获得超级链接
接口，可能 不是最聪明的想法
因为如果你的网站是莫名其妙 访问或者通过人工
谁的点击左右或购买 机器人像谷歌的或蜘蛛
因为他们是所谓的，这只是 爬行网页试图指数
网络作为一个搜索引擎， 他们可以很容易
通过打得到这种URL的。
这就是功能 相当于，在这种情况下，
谷歌销售的所有股份。
>> 现在，坦率地说，它是完全 愚蠢的CMS
使用JavaScript和cookie 实施其登录系统
不这样做服务器端，如 你们在PSET做，会7--
有一个的login.php file--永远，永远，
安全始终应该是 在服务器侧进行，
未在客户机侧，因为正如本 文章建议，你可能自己
看到在某些时候，它是 平凡的用户，是好是坏，
刚刚关闭JavaScript 更何况饼干。
所以这是你的日常跆拳道。
>> 还有一个，这 是那种太可怕了，
所以我会提到它，如果 仅作为一个生命的教训。
当你使用一个应用程序 所谓像Snapchat等
这表示，这些照片只持续 五秒十秒钟，或诸如此类的东西。
他们是短暂即 绝对不是这样的。
像有没有办法，数字化， 实现某种形式的视频，
或图像或文字等分享 上的另一端的接收方
不能以某种方式保存数据。
>> 在最原始的方法，有人 可以采取他们的电话。
他们有10秒的窗口 而在寻找一些卡
只需要一些其他的手机 和它拍照，效果显着。
所以，你可以保留 一些数字的方式。
你们当中有些人知道如何利用 截图您的手机上。
事实上，如果你不知道这一点， 认识到，至少Snapchat，
而且我认为其他 应用这些天，
至少告诉你，如果 收件人实际
拍摄图像的截图。
>> 但更糟糕的是，这是snappening， 有人最近创造它，
其中，大约10万 捕捉已被释放
什么叫做torrent文件 在各网站最终。
而这些包含了一大堆 私人邮件和公告。
原来，他们大多是良性的， 所以不是你所期望的是什么。
但由于人们有 使用第三方网站，
他们Snapchat登录 用户名和密码，然后
保存所有的卡扣 这个第三方网站。
它是第三方 网站被黑，
它只是意味着有人想出如何 让所有的10万再加上那些图片
到自己的硬盘驱动器 随后的共享。
坦率地说，在这里也一样，它的排序 对愚蠢的Snapchat
以这样的方式来实现该 第三方可以排序拦截
的数据，并且它不依赖于你的 自己的应用程序在手机上运行。
但在这里，也认识到这些 事情不应该抓住你措手不及，
或者至少应该有 是生命的教训在这里。
如果您想技术 详细信息，请访问该网址有
这是在今天的幻灯片。
好了，就什么问题 CS在今天的生活中的经验教训？
把这一关。
什么事呢？
我已经得到了很多人的检查 他们Snapchat什么的了。
>> 好吧，那么SQL， 结构化查询语言。
让我们把这个包。
而且，即使 我们只是刮伤
这种表面 语言，我们会给你
足够的语言 在PSET 7的形式
这样就可以解决一些 相当普遍的功能。
但同时也发现有一对夫妇 事情我们不要求你，
但他们将是 重要的来了最后的项目
当然来使实际 实际用户的网站
是这样的设计决策。
>> 事实证明，在 MySQL数据库，你
有像一束束的选择 为你的列中的数据类型
和其他的东西，但你也有 所谓存储的选择
引擎为您的所有数据， 排序文件系统，
如果您熟悉， 您的所有数据。
是它最终存储在什么格式？
与最常见的，或许，一直 MyISAM和InnoDB，技术术语
我们将只关心 的范围内，一个人
和一个不具有 以下特征。
>> 假设你有 一个小宿舍冰箱。
并假设你和你的 室友，谁分享这个冰箱，
真的是喜欢说牛奶。
这是，事实上，如何 故事告诉我回来的路上
在这一天，当我把一门课程 所谓CS 161的操作系统，这
同样探讨了这个话题。
所以，你有这个冰箱。
你出的牛奶。
你回家的时候，你的室友的 还在上课也好，
而你决定我要去 出去找一些牛奶。
所以你关闭了冰箱，死机 宿舍里，走在街对面
到CVS或其它地方，并获得 在网上买了一些牛奶。
>> 同时，你的室友到家 从类，进入宿舍里，
打开冰箱，还实现 ooph，我们出的牛奶。
于是，他或她关闭 冰箱再发生
去其他的CVS， 这恰好是
从另一个CVS一个街区之遥 在广场上，并​​在得到线
那里得到一些牛奶。
现在，当然，在几分钟 后来，你们俩回去，
和最坏的所有可能的 结果已经发生。
你们两个有奶。
而你真的不 像牛奶那么多。
所以其中之一是刚 去酸味在一些点。
所以，现在你有过量 牛奶在冰箱里全是因为什么原因呢？
>> [听不清]
DAVID马兰：是的，你没有 彼此以某种方式进行通信
你都拿到牛奶。
因此，在最简单的 如何在人类的世界里，
如何才能避免这种无聊 场景发生这样的
您只落得之一。
这些文字，是不错的。
但是，怎么回事？
贴字条。
DAVID马兰：一个便利贴。
任何形式的沟通 告诉你的室友
走不进冰箱里的牛奶。
我打算去进货我自己。
所以，你需要以某种方式 锁定该资源。
因此，我们可以让this--我们可以种 毁灭的故事，变成一个CS的故事
由此认为这是就像一个 的变量，它存储一些数值。
而现在，在 牛奶的值为零，
你不想让你的 室友检查变量
然后再做出决定他或她自己 根据该变量的状态
如果你在过程中 改变该变量的状态。
>> 所以SQL的线路之一，我们 给你PSET 7规格
这是一个在这里。
我们不花大 的时间谈论它。
但事实证明，如果你想 买一些股票CS50融资
你已经有 ，你的一些股票
希望能够做一些 事情瞬间在一起。
你想成为能够 有效地，在一个高的水平，
检查没事，如果我想 买免费的更多的股份，
仙股我们 在规范中讲，
我想先检查 我有多少股份有。
并假设这是5。
并假设我想 买10多了，我最终
想拥有15万股股票。
所以我要问两个问题。
什么是变量的状态？
什么是该行的状态呢？
有多少股票我现在有吗？
然后，你要继续前进，更新。
所以这是模拟的 牛奶在您检查的行，
然后你想更新 因为如果你想购买10股，
你不想改变 行至10，则
想要将其更改为5 加10或，当然，15。
>> 这行代码将确保 这两个概念的想法
一起发生或根本没有。
没有人，包括一些其它的用户 谁是登录到同一网站，
可不知何故中断 行的检查
与该行的更新，该 选择，如果你愿意的更新。
而语法是不是超明显， 但是这一条线，长的是很，
确保这两个操作 检查变量或检查行
并更新该行发生的原子。
>> 哦，又来了。
在我的手机短信。
因此，让我们使这个 一点更具体。
假设你不 实现一台冰箱，
而你不执行 PSET 7，但实际的银行，
或自动取款机，自动取款 机，不知何故，让你
希望能够授权 用户汇款
从一个帐户向另一个。
OK，挂。
我现在要静音，谢谢。
因此，我们要转移资金 从一个帐户号
到一个不同的帐户 数，特别是100元。
因此，这是一种任意的 例如，让你的自动取款机，
可能要执行两个SQL 查询，从一个帐户中减去，
并添加到其他帐户。
但是你要确保这些 两行无论发生或根本没有。
你不想要的东西 越来越中断。
你不这样做一些聪明的坏蛋 不知何故站在美国银行
在前面的两个自动取款机 他并以某种方式
排序打字的 同时命令，
希望试图以小博大200美元，而不是 100元，只用100美元记。
总之，你要这 做出你期望的那样。
>> 和你的方式 这在SQL数据库
你在什么把它包 称为事务。
从字面上看在SQL中，你可以调用CS50的 与报价引文结束开始查询功能
交易。
然后，您可以执行任何数量 随后的SQL查询，
但他们都不拿 在数据库上实现
直到调用查询报价引文结束 提交时，如果再使用PHP。
并以这种方式，可以确保 即使你有1000个用户所有
打你的数据库 同时，SQL
会答应这些 两个查询将
后，其他执行一个正确的。
这样你就不会结束与过量 牛奶或错误的数量，最终，
钱。
>> 所以记住这一点， 没有那么多的PSET 7
但对于最终的项目 如果你是真正
试图四处移动数据 跨表，你可能会在这里。
但也许更简单，更 显然，了解一个例子
这是一个在这里。
有人通过电子邮件发送关于我们 这只是一天
当他看到类似的东西在网上。
>> 所以，据我所知，销系统 是不是容易受到这种攻击。
我不知道，如果它甚至使用 机罩下方的SQL数据库。
但是，让我们用它来 就事论事。
这里的屏幕 哈佛人往往
查看与登录时的 哈佛的ID号及其引脚。
并假设销系统是 在PHP和MySQL的执行
数据库，代码，有人 可能已经编写年前
可能是这样的。
首先，声明一个 变量调用的用户名。
和刚刚获得来自 在POST超全局。
然后得到另一个变量 所谓的密码，也这样做。
然后只需要执行 在这里长时间的查询，
从用户那里选择明星 用户名等于如此这般
和口令等于如此这般。
>> 请注意，该卷曲 支撑我在这里使用
刚才的意思是PHP，走 未来，并以
这两个值 变数就在那里。
他们不是绝对必要的，但 他们倾向于避免细微的语法错误。
因此，这看起来完全 正确的第一眼。
它是。
你可以实现的 销系统是这样的。
>> 但是，假设一个超级 聪明和恶意学生
该输入他或她的脚。
所以，我取出子弹 这里的招牌，在模拟时，
我实际上已经揭示 他或她可能会打字。
这是一个有点怪。
但是，跳出你的可能 令人担忧的关于用户的输入，
即使你不知道 SQL注入攻击手段。
为什么这个看起来有点腥？
那是什么？
[听不清]
DAVID马兰：本或者是 有点怀疑。
事实上，这是从SQL关键字。
所以这不是一个好兆头。
一个事实，即有 所有这些单引号
那里 - 其实，一个最简单的 如何打破某些数据库
是通过键入像O'Reilly的名字 一个其中有一个撇号
因为如果人类是谁写的 幕后的代码
没有考虑到有 可能是单引号在用户的
输入，和他或她正在使用 单引号中的代码，
不好的事情都可能发生。
>> 事实上，更糟糕的是，考虑这一点。
如果这是一次代码 有人在哈佛岁月
以前写的脚 系统，注意什么
即将获得取代 用户名和密码
如果用户在再次 skroob为他们的用户名
然后一，二，三，四，五， 报价或报价引文结束一等
举一个。
并注意什么键 这里是用户还没有
开始了他们的密码或 其引脚与报价。
而且他们还没有结束它 用引号，因为他或她
是假设如果 程序员就没有那么尖锐，
他们将有那些 单引号中的代码。
>> 因此，这里的代码。
和置换该 现在可能发生的事情是这样的。
我已经强调了什么 用户已键入英寸
所以前，后。
并注意什么婉转现在令人担忧 关于这个SQL代码的右半边？
这是一个稍微复杂一些，诚然， 比疑问，我们已经看到了。
但是这不可能 是一个很好的事情，如果你是
话说择思达，这是选择 一切从用户的表
其中username等于skroob和 密码等于一，二，三，四，
5或一等于1。
什么是逻辑蕴涵 那最后一句大概是？
这只是总是如此。
>> 那种因为我们已经猜到了 还是想通了，通过试错
程序员谁 写这段代码没
预测一个人或坏人 键入单引号为好，
我们可以语法 完成SQL查询
带着几分无厘头 但事
在语法上是不正确 总是计算为true。
因此，如果该代码被用来回答 这个问题真的还是假的应
该用户被允许通过，则 答案永远是显然会
是真实的，因为它始终会 以从数据库中选择的东西
因为过程中的一个总是等于1。
>> 那么，有什么解决办法吗？
井PSET 7，我们实际上 避免这种情况都在一起。
我们给你一个查询功能，而且我们 鼓励您使用问号
作为占位符，类似 在精神的printf的％S，
但什么是关键关于问号 在这里，如果你真正阅读过
的functions.php，在那里我们 查询功能的实现，
这些问号都逃了出来， 因此任何潜在的危险
像单引号开启 成转义单引号。
>> 因此，这是什么 真正发生的事情，如果你
使用CS50的查询功能，或任何数量的 第三方免费库
这样做。
不会在这种情况下重要，在绿色， 如果用户在一个单一的报价已输入
因为查询 功能，我们写的是
会前添加反斜杠 任何此类危险的报价。
因此，这是不是在 事实上，将是合法的。
这就好比键入一个疯狂的寻找 密码这是当然的，不会
要skroob的实际密码。
>> 因此，外卖的CS50是其中之一， 绝对是经常使用的东西
像CS50的查询功能 或底层库，
这恰好被称为PDO。
但从来没有，从来没有， 永远不会做这样的代码
不逃避或擦洗 正如他们所说的投入。
你会在某个时候可能 遇到这样的一些网站。
事实上，它似乎是这种情况 像在机场和酒店的地方
他们有免费的Wi-Fi 访问，你必须登录到，
这些网站总是 可怕的实现。
所以在家里练习一种乐趣， 不是为了恶意目的或以上
道路上的一个有趣的 运动，是只需要输入
一个撇号，单引号， 到一些网站上的表单
看看会发生什么。
如果服务器崩溃或使 你某种错误信息，
它很可能是 有人没有预料到这一点。
然后你应该提醒正确 当局并没有进一步进行。
>> 所以，现在你们应该有希望 点击这里了解更多的怪胎幽默。
>> [笑]
DAVID马兰：你知道你是个怪胎。
在接下来的几个 年，你会记得
谁的小鲍比表是 由于这部动画片在这里。
所以记住这一点，因为我们 上下文切换是最后一次
今天为JavaScript。
我们花了比较少 时间对PHP的语法
因为它实际上是 超级相似C.
并很好地就够了，太多的JavaScript 超类似C的语法
还有我们会看到 只是一瞬间，当我们将
看看本周晚些时候尤其如此。
你可以用这种语言做了什么， 虽然，所有的功能更强大，
特别是原料药。
>> 但首先快速浏览。
因此，人们在JavaScript中，有 没有主函数，这是很好的。
至于用PHP，你可以只写代码。
情况是这样的。
和布尔表达式可能 这个样子还是这样。
开关的存在，并且它们 可能是这样的。
四回路这个样子。
while循环是这样的。
做消遣这个样子。
然后阵列的样子 这非常类似于PHP。
但是请注意，在你的JavaScript 声明一个变量不与美元
签署，不与数据类型，但是从字面上 说VAR变量之前。
它也是弱类型 在于它具有的类型，
但你不显式地声明它们。
而对于随后的字符串， 例如，可能看起来
这样，该字符串 在这种情况下，被称为第
再一个目的。
而这些，我们会看到更多以前长。
和对象也许是一个 最常见的数据结构
在一个基于JavaScript的 方案，因为它允许
您可以任意关联 键值对刚
像PHP的关联数组 而就像你自己的哈希表
或尝试为我们实施 在几个星期前。
因此，让我们真正看到了什么 我们可以用JavaScript做。
特别是，这是 功能一箩筐
该浏览器有 让我们上钩的JavaScript
成以下述方式一个网站。
JavaScript是经常被用来作为 客户端脚本语言。
它不会被编译。
它也被解释。
但是，与PHP，其中已经运行 在服务器上，在Web服务器中，
或者是内心深处 客户端的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，
其中的顶部具有一个文档类型 声明说：这里来的HTML 5。
现在这里是一个HTML标签。
这里的head标签。
下面是今天有什么新鲜事。
>> 我们现在有一个脚本标签 内的页面的头部。
而这显然是不 很少，但是公告
我已经定义了一个 脚本的脚本。
和作为一边，因为这 是一种常见的误解，
JavaScript有绝对没有 做Java的语言
有些人可能 已经学会了在APCS。
它更多的是营销 比什么都重要的事情，
以前骑的Java多年的燕尾服。
但JavaScript的，无关 Java的，只是类似，并且同样造成困扰，
容易混淆的名字命名的。
>> 因此，这里是你如何声明一个函数 在JavaScript中，从字面上说的功能，
然后该函数的名称， 那么任何参数可能需要，
就像在PHP。
原来，在JavaScript中，最为1 存在烦人的功能是预警。
这是一个小窗口， 会弹出并提醒您
到一些信息。
在它的一般皱起了眉头。
但是，我们将用它作为我们 这里第一个练习。
>> 注意：JavaScript的一些功能。
单引号和双引号 实际上并不重要了。
单引号和双 报价可以互换，
而在C中，你必须使用 双引号的字符串，
你有两个单 引用的字符。
在JavaScript的世界里， 很多人，大多数人
周围使用字符串单引号 只是因为它是一个风格的东西。
但是，什么是加号运算符在这里， 这是我们以前从未见过的？
>> 听众：串联。
DAVID马兰：级联。
所以C甚至没有了。
PHP具有点运算符， 它执行此操作。
JavaScript有加号运算符， 而令人困惑的是Java一样。
现在，这是怎么回事吗？
>> 所以，这里的地方基本 那张照片的理解
我们扔了一对夫妇 日前进场。
还记得我们有一个简单的 版本的HTML page--
它只是说，你好世界。
然后我们画了一棵树 到右侧，这
有一堆矩形和线条 连接它们就像一个家庭树。
这就是所谓的DOM 或文档对象模型。
而事实证明，你可以访问 在语法树的矩形
像下面这样。
你从字面上说的文件，这是一个 在JavaScript特殊的全局变量
程序，它具有这样的功能 与之相关联，可以访问
类似结构，但你根本 说点，然后函数名，
通过ID获得的元素。
>> 我想要得到的元素是 显然报价所享有的名字。
然后，我想它的价值。
现在，我们正在超越自我。
我甚至不知道什么 这一切是什么。
让我们快进到HTML上 的页面，这是超级简单。
>> 我已经定义的通知 形成一个倒在这里。
请注意，我已经给它一个独特的 ID，即使我们不使用
此属性之前。
但是，这存在于HTML。
你可以唯一地标识了一些大块 的HTML像这样的标识符。
>> 请注意，现在this--原来的HTML 支持，每说箩筐
刚才，一个整体 一堆的事件处理程序。
而这个事件处理程序上说，提交。
在用户提交本 窗体，调用以下代码。
而代码是怎么回事 被称为或执行
正是这一点，希腊 随后返回false功能。
一切应 是相当熟悉的。
>> 这里是文本类型的输入，其 的ID，在这种情况下，将是名称。
我们没有一个实际的name属性 这个时间 - 和一个提交按钮。
因此，所产生的页面看起来是这样的。
所得的行为， 你会看到，看起来是这样的。
该页面是本地主机说，你好 大卫，几乎没有一个美观
的方式来迎接用户。
但是，什么是真正回事？
>> 那么，考虑这是什么。
这是一个文本字段。
并根据 HTML在这里，我已经给它
一个唯一的标识符 所谓的报价所享有的名字。
同时，我已经说过了，当 用户提交此表单
通过按Enter键或单击Submit 按钮，拨打叫迎功能
然后返回False。
让我们考虑那些相反。
请注意，当我点击提交时， 当前页的URL不改变。
浏览器的图标 未开始旋转。
我没有去任何地方，这是 从字面上因为我说返回False。
返回False短路或停止 窗体的默认行为。
让那么留给我们 这最后一个问题。
什么是问候呢？
好了，迎接显然 调用一个调用的函数
警报，通过在一个 长的说法是
串联起来的结果 一堆的子字符串，你好逗号分隔，
那么无论这个返回。
因此，文件就像是一个全球性的 变量是树的根，
调用一个特殊的功能， 否则现在被称为方法。
一个函数，它是 内的一个变量是
叫的方法，而不是一个函数。
>> 因此，获得了元素的ID。
哪些因素你 希望通过它的ID来获得？
引用所享有的姓名和 那么具体数值。
所以，换句话说，代码简单 找到ID为名称的文本字段
然后获取其值。
所以，如果我要改变这 并说达文，而不是大卫，
并点击提交，现在我们 有一个问候的达文。
>> 好吧，让一切优秀和良好。
但是让我们看看我们能不能​​做 这一点，因为刚刚清洗剂
编写这样的代码是 一般会在被皱起了眉头。
这是要去看看可怕。
但是，什么是第一 你注意这里的区别
在这个版本中除了 名称更改为DOM呢？
什么结构上看起来不一样 这个相对于其他的？
是吗？
听众：是的形式 现在的剧本之上？
DAVID马兰：是啊，形式之上 的脚本，一些奇怪的原因。
所以这是第一件事情 即跳出我了。
谢天谢地，至少， 这部分是相同的。
这样看来唯一 有所不同的就是这个。
>> 因此，这里是什么整洁 关于JavaScript 2。
它使得它很难 了解乍看之下，
尤其是对于最后的项目，如果 你看的代码示例在线，
但它归结为一些 基本的句法特征。
这里又是 全局变量的文件。
这里再次的是，方法或函数 上面写着得到了ID的元素。
这一次，我想 拿到所谓演示的ID。
哪里是？
这显然​​是正确的 在这里，形式本身。
>> 现在发现，显然，如果我 取回从树节点
表示形式 本身，而不是一个文本字段，
事实证明，形式，即 从树节点或矩形，
有什么，我们会打电话给一个属性， 非常，非常，非常相似
在精神上要在C的结构这只是 这个矩形的内部数据成员。
>> 所以，我有形式 在这里，我安装，
或者我指定，其对提交 处理器或者更确切地说，在提交财产
下面的函数。
这是迄今为止，最疯狂 事情至此语法。
原来，在JavaScript中和 PHP，并坦言在C此事，
即使我们不这样做，你可以 添加无名，匿名，或者AKA拉姆达
没有一个名字的函数 但还是能够调用。
>> 那么，我在这里做的，我分配 这在提交属性，它
是我的DOM树中的该节点的内部，一 函数，函数指针，如果你愿意。
该函数没有 名字，但也不至于
重要，因为我们将看到 在某一时刻如何调用它。
当这个函数被调用， 这段代码被执行，然后
假的是就像之前交回。
>> 但是请注意，我做了什么。
在这一点上，在 故事，我有一个表格。
它有所谓演示一个唯一的ID。
到这里，我有一个脚本标签 其执行以下代码。
它连接到该节点 树它是在提交
物业该功能在这里。
而刚刚通过的浏览器是如何工作的性质， 当我现在单击提交或按Enter键，
该功能将会被调用。
它并不需要，因为谁名字 到底在乎它叫什么。
它永远会得到的唯一一次 所谓的是，当我提交表单。
有没有必要对我来说， 人类的开发，
真正把它叫做任何其他地方。
>> 现在，就像一个玩笑话，好像这就是 不介意弯曲不够，
我们甚至可以这样 看起来更神秘使用
一个超级流行的库称为jQuery的。
事实上jQuery和JavaScript的 经常混为一谈。
而我们要做的周三开始 使用这种语言，这些库
建设日益异步 和动态应用
像图让 应用程序，应用程序
即实时更新的网页 时间，就像Facebook或谷歌聊天软件
这样做，并且不再把自己局限在 通过一个GET或只是击中后提交
孤单。
所以，我会看到你在周三。
>> [音乐播放]