ySJ
|
2.0/chapter19/#491 |
2010-04-27 14:37:46
|
这些翻译字符串来自于你在info_dict或URl中指定的应用,工程或Django内核。
|
|
ySJ
|
2.0/chapter19/#516 |
2010-04-27 14:45:54
|
也有一个<literal>ngettext</literal>接口:
|
|
ySJ
|
2.0/chapter19/#525 |
2010-04-27 14:47:26
|
<literal>obj</literal>包括一个JavaScript数组对象,元素值在它们对应于<literal>fmt</literal>的占位符中以它们出现的相同次序顺序插值 。
|
|
ySJ
|
2.0/chapter19/#535 |
2010-04-27 14:49:07
|
但是,你不应重复编写字符串插值:
|
|
ySJ
|
2.0/chapter19/#541 |
2010-04-27 14:51:08
|
你可以创建和更改翻译目录,
|
|
ySJ
|
2.0/chapter19/#541 |
2010-04-27 14:51:21
|
你可以创建和更改翻译目录,就像其他
|
|
ySJ
|
2.0/chapter19/#543 |
2010-04-27 14:51:56
|
Django翻译目录一样,使用django-admin.py makemessages 工具。
|
|
ySJ
|
2.0/chapter19/#554 |
2010-04-27 14:57:14
|
字符串域为 <literal>django</literal> 或 <literal>djangojs</literal> 。字符串域是用来区别将数据存储在同一信息文件库(一般是 <literal>/usr/share/locale/</literal> )的不同程序。django 域是为Python和模板翻译字符串服务的,被加载到全局翻译目录。
|
|
ySJ
|
2.0/chapter19/#555 |
2010-04-27 15:00:39
|
<literal>djangojs</literal> 域只是用来尽可能缩小JavaScript翻译的体积。
|
|
ySJ
|
2.0/chapter19/#562 |
2010-04-27 15:03:39
|
对于那些要提取消息或编译消息文件的人们来说,需要的只有这么多。翻译工作本身仅仅包含编辑这个类型的现存文件,但如果你要创建你自己的消息文件,或想要测试或编译一个更改过的消息文件,你将需要这个<literal>gettext</literal>公用程序。
|
|
ySJ
|
2.0/chapter19/#572 |
2010-04-27 15:04:06
|
在同一文件夹下展开这3个文件。(也就是
|
|
ySJ
|
2.0/chapter19/#577 |
2010-04-27 15:04:48
|
<literal>控制面板 > 系统> 高级 > 环境变量</literal> |
|
ySJ
|
2.0/chapter19/#579 |
2010-04-27 15:05:09
|
在<literal>系统变量</literal>列表中,点击<literal>Path</literal>,点击<literal>Edit</literal> |
|
ySJ
|
2.0/chapter19/#581 |
2010-04-27 15:05:32
|
把<literal>;C:\Program Files\gettext-utils\bin</literal>加到<literal>变量值</literal>字段的末尾。
|
|
ySJ
|
2.0/chapter19/#589 |
2010-04-27 15:07:40
|
<reference name="final chapter" refuri="../chapter20/">未章</reference> 将关注于安全,如何帮助你的用户和网站远离恶意软件的攻击。
|
|
ySJ
|
2.0/chapter20/#9 |
2010-04-27 15:14:54
|
作为Web开发人员,我们有责任来对抗这些黑暗的力量。
|
|
ySJ
|
2.0/chapter20/#10 |
2010-04-27 15:15:05
|
每一个Web开发者都应该把安全看成是web编程中的基础部分。
|
|
ySJ
|
2.0/chapter20/#31 |
2010-04-27 15:18:07
|
这包括用户数据(比如Web表单提交的内容)和带外数据(比如,HTTP头、cookies以及其他信息)。
|
|
ySJ
|
2.0/chapter20/#86 |
2010-04-27 15:26:02
|
传给 <literal>extra()</literal> 方法的 <literal>where</literal> 参数。
|
|
ySJ
|
2.0/chapter20/#87 |
2010-04-27 15:27:32
|
(参考 附录 C。) 这个参数故意设计成可以接受原始的SQL。
|
|
ySJ
|
2.0/chapter20/#93 |
2010-04-27 15:29:08
|
在每一个示例中,为了避免字符串被篡改而使用 <emphasis>绑定参数</emphasis> 来代替。这样,本节开始的例子应该写成这样:
|
|
ySJ
|
2.0/chapter20/#10 |
2010-04-28 08:44:25
|
每一个Web开发者都应该把安全看成是Web编程中的基础部分。
|
|
ySJ
|
2.0/chapter20/#162 |
2010-04-28 09:10:21
|
<emphasis>中间人</emphasis> 攻击:检索所在有线(无线)网络,监听会话数据。
|
|
ySJ
|
2.0/chapter20/#166 |
2010-04-28 09:15:04
|
这两种攻击的一个例子可以是在一间咖啡店里的某个攻击者利用店内的无线网络来捕获某个会话cookie,然后她就可以利用那个cookie来假冒原始用户。
|
|
ySJ
|
2.0/chapter20/#179 |
2010-04-28 09:20:45
|
例如,PHP允许在URL(如 <literal>http://example.com/?PHPSESSID=fa90197ca25f6ab40bb1374c510d7a32</literal> 等)中传递会话标识符。攻击者欺骗用户点击一个硬编码会话ID的链接,这回导致用户转到那个会话。
|
|
ySJ
|
2.0/chapter20/#181 |
2010-04-28 09:21:22
|
会话滞留已经运用在钓鱼攻击中,以诱骗用户在攻击者拥有的账号里输入其个人信息。
|
|
ySJ
|
2.0/chapter20/#187 |
2010-04-28 09:26:45
|
攻击者可以诱骗用户点击一个链接来提交背景颜色,实际上包含了一个XSS攻击。
|
|
ySJ
|
2.0/chapter20/#188 |
2010-04-28 09:27:31
|
如果颜色没有转义,那么就可以再把恶意代码注入到用户环境中。
|
|
ySJ
|
2.0/chapter20/#198 |
2010-04-28 09:28:32
|
不要直接在cookie中保存数据。
|
|
ySJ
|
2.0/chapter20/#199 |
2010-04-28 09:29:25
|
相反,存储一个在后台映射到session数据存储的session ID。
|
|
ySJ
|
2.0/chapter20/#220 |
2010-04-28 10:09:44
|
<emphasis>邮件头部注入</emphasis> :SQL注入的兄弟,是一种通过劫持发送邮件的Web表单的攻击方式。
|
|
ySJ
|
2.0/chapter20/#241 |
2010-04-28 10:17:51
|
Django内建邮件功能(在 <literal>django.core.mail</literal> 中)根本不允许在用来构建邮件头部的字段中存在换行符(表单,收件地址,还有主题)。
|
|
ySJ
|
2.0/chapter20/#254 |
2010-04-28 10:22:44
|
尽管一眼看上去,视图通过 <literal>BASE_PATH</literal> (通过使用 <literal>os.path.join</literal> )限制了对于文件的访问,但如果攻击者使用了包含 <literal>..</literal> (两个句号,父目录的一种简写形式)的文件名,她就能够访问到 <literal>BASE_PATH</literal> 目录结构以上的文件。对她来说,发现究竟使用几个点号只是时间问题,比如这样:<literal>../../../../../etc/passwd</literal>。
|
|
ySJ
|
2.0/chapter20/#270 |
2010-04-28 10:30:42
|
不用多说,你 <emphasis>永远</emphasis> 不要在编写可以读取任何位置上的文件的代码!
|
|
ySJ
|
2.0/chapter20/#272 |
2010-04-28 10:31:28
|
Django内置的静态内容视图是做转义的一个好的示例(在 <literal>django.views.static</literal> 中)。这是相关代码:
|
|
ySJ
|
2.0/chapter20/#297 |
2010-04-28 10:36:22
|
正如我们在第12章所提到的,Django的<literal> DEBUG</literal> 设置控制这些错误信息的显示。
|
|
ySJ
|
2.0/chapter20/#307 |
2010-04-28 10:37:15
|
永远记住,Web安全是一个不断发展的领域。如果你正在阅读这本书的停止维护的那些版本,请阅读最新版本的这个部分来检查最新发现的漏洞。
|
|
ySJ
|
2.0/chapter20/#308 |
2010-04-28 10:37:52
|
事实上,每周或者每月花点时间挖掘Web应用安全,并且跟上最新的动态是一个很好的主意。
|
|
ySJ
|
2.0/chapter20/#309 |
2010-04-28 10:39:10
|
花费很少,但是对你网站和用户的保护确是无价的。
|
|
ySJ
|
2.0/chapter20/#316 |
2010-04-28 10:40:11
|
在运行你的Django网站时,无论是为你或几个朋友的小网站,或者是下一个google,我们祝你好运。
|
|
yukonli
|
2.0/chapter08/#291 |
2009-12-15 16:43:01
|
比方说,你可以考虑通过下面这个URLpattern所描述的方式来向Django的管理站点添加一个目标页面
|
|
yukonli
|
2.0/chapter08/#371 |
2009-12-15 17:23:43
|
然而,当我们做到这一步时,我们仍然可以改进method_splitter。从代码我们可以看到,它假设Get和POST视图除了request之外不需要任何其他的参数。那么,假如我们想要使用method_splitter与那种会从URL里捕捉字符,或者会接收一些可选参数的视图一起工作时该怎么办呢?
|
|
yukonli
|
2.0/chapter08/#371 |
2009-12-15 18:00:44
|
然而,当我们做到这一步时,我们仍然可以改进<literal> method_splitter</literal> 。从代码我们可以看到,它假设<literal> Get</literal> 和<literal> POST</literal> 视图除了<literal> request</literal> 之外不需要任何其他的参数。那么,假如我们想要使用<literal> method_splitter</literal> 与那种会从URL里捕捉字符,或者会接收一些可选参数的视图一起工作时该怎么办呢?
|
|
yulefox
|
2.0/chapter20/#55 |
2010-02-08 18:04:10
|
想象一下,如果攻击者在查询框中输入 <literal>"' OR 'a'='a"</literal> 。
|
移到下一句
|
yulefox
|
2.0/chapter20/#56 |
2010-02-08 18:04:28
|
此时,查询的字符串会构造如下:
|
|
yulefox
|
2.0/chapter01/#24 |
2010-02-09 09:10:30
|
最重要的是,理解实现的<emphasis></emphasis>会使你成为一个优秀的web开发者。)
|
|
yulefox
|
2.0/chapter01/#24 |
2010-02-09 09:11:03
|
最重要的是,理解实现的来龙去脉会使你成为一个优秀的web开发者。)
|
|
yulefox
|
2.0/chapter01/#180 |
2010-02-09 09:13:03
|
如果你有Python开发经验,在学习过程中应该不会有任何问题。
|
|
yulefox
|
2.0/chapter01/#181 |
2010-02-09 09:13:57
|
基本上,Django的代码并 没有使用一些黑色魔法(例如代码中的欺骗行为,某个实现解释或者理解起来十分困难)。
|
|
yulefox
|
2.0/chapter01/#182 |
2010-02-09 09:14:17
|
对你来说,学习Django就是学习她的命名规则和API。
|
|