| 
 ySJ
 | 
     2.0/chapter20/#199 | 
     
 2010-04-28 09:29:25 
 | 
     
 相反,存储一个在后台映射到session数据存储的session ID。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#198 | 
     
 2010-04-28 09:28:32 
 | 
     
 不要直接在cookie中保存数据。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#188 | 
     
 2010-04-28 09:27:31 
 | 
     
 如果颜色没有转义,那么就可以再把恶意代码注入到用户环境中。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#187 | 
     
 2010-04-28 09:26:45 
 | 
     
 攻击者可以诱骗用户点击一个链接来提交背景颜色,实际上包含了一个XSS攻击。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#181 | 
     
 2010-04-28 09:21:22 
 | 
     
 会话滞留已经运用在钓鱼攻击中,以诱骗用户在攻击者拥有的账号里输入其个人信息。
 | 
      | 
    
    
     | 
 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/#166 | 
     
 2010-04-28 09:15:04 
 | 
     
 这两种攻击的一个例子可以是在一间咖啡店里的某个攻击者利用店内的无线网络来捕获某个会话cookie,然后她就可以利用那个cookie来假冒原始用户。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#162 | 
     
 2010-04-28 09:10:21 
 | 
     <emphasis>中间人</emphasis> 攻击:检索所在有线(无线)网络,监听会话数据。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#10 | 
     
 2010-04-28 08:44:25 
 | 
     
 每一个Web开发者都应该把安全看成是Web编程中的基础部分。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#93 | 
     
 2010-04-27 15:29:08 
 | 
     
 在每一个示例中,为了避免字符串被篡改而使用 <emphasis>绑定参数</emphasis> 来代替。这样,本节开始的例子应该写成这样:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#87 | 
     
 2010-04-27 15:27:32 
 | 
     
 (参考 附录 C。) 这个参数故意设计成可以接受原始的SQL。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#86 | 
     
 2010-04-27 15:26:02 
 | 
     
 传给 <literal>extra()</literal> 方法的 <literal>where</literal> 参数。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#31 | 
     
 2010-04-27 15:18:07 
 | 
     
 这包括用户数据(比如Web表单提交的内容)和带外数据(比如,HTTP头、cookies以及其他信息)。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#10 | 
     
 2010-04-27 15:15:05 
 | 
     
 每一个Web开发者都应该把安全看成是web编程中的基础部分。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter20/#9 | 
     
 2010-04-27 15:14:54 
 | 
     
 作为Web开发人员,我们有责任来对抗这些黑暗的力量。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#589 | 
     
 2010-04-27 15:07:40 
 | 
     <reference name="final chapter" refuri="../chapter20/">未章</reference> 将关注于安全,如何帮助你的用户和网站远离恶意软件的攻击。
 | 
      | 
    
    
     | 
 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/#579 | 
     
 2010-04-27 15:05:09 
 | 
     
 在<literal>系统变量</literal>列表中,点击<literal>Path</literal>,点击<literal>Edit</literal> | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#577 | 
     
 2010-04-27 15:04:48 
 | 
     <literal>控制面板 > 系统> 高级 > 环境变量</literal> | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#572 | 
     
 2010-04-27 15:04:06 
 | 
     
 在同一文件夹下展开这3个文件。(也就是
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#562 | 
     
 2010-04-27 15:03:39 
 | 
     
 对于那些要提取消息或编译消息文件的人们来说,需要的只有这么多。翻译工作本身仅仅包含编辑这个类型的现存文件,但如果你要创建你自己的消息文件,或想要测试或编译一个更改过的消息文件,你将需要这个<literal>gettext</literal>公用程序。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#555 | 
     
 2010-04-27 15:00:39 
 | 
     <literal>djangojs</literal> 域只是用来尽可能缩小JavaScript翻译的体积。
 | 
      | 
    
    
     | 
 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/#543 | 
     
 2010-04-27 14:51:56 
 | 
     
 Django翻译目录一样,使用django-admin.py makemessages  工具。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#541 | 
     
 2010-04-27 14:51:21 
 | 
     
 你可以创建和更改翻译目录,就像其他
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#541 | 
     
 2010-04-27 14:51:08 
 | 
     
 你可以创建和更改翻译目录,
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#535 | 
     
 2010-04-27 14:49:07 
 | 
     
 但是,你不应重复编写字符串插值:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#525 | 
     
 2010-04-27 14:47:26 
 | 
     <literal>obj</literal>包括一个JavaScript数组对象,元素值在它们对应于<literal>fmt</literal>的占位符中以它们出现的相同次序顺序插值 。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#516 | 
     
 2010-04-27 14:45:54 
 | 
     
 也有一个<literal>ngettext</literal>接口:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#491 | 
     
 2010-04-27 14:37:46 
 | 
     
 这些翻译字符串来自于你在info_dict或URl中指定的应用,工程或Django内核。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#490 | 
     
 2010-04-27 14:35:51 
 | 
     
 这些问题的主要解决方案就是 <literal>javascript_catalog</literal> 视图。该视图生成一个JavaScript代码库,包括模仿 gettext 接口的函数,和翻译字符串的数组。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#460 | 
     
 2010-04-27 14:32:00 
 | 
     
 这个视图是通过 <literal>GET</literal> 方法调用的,在请求中包含了 <literal>language</literal> 参数。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#458 | 
     
 2010-04-27 14:30:54 
 | 
     
 (注意这个例子使得这个视图在 <literal>/i18n/setlang/</literal> 中有效。)
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#446 | 
     
 2010-04-27 14:27:43 
 | 
     
 但是,使用应用程序相关的翻译和项目翻译在使用 <literal>make-messages</literal> 时会产生古怪的问题。它会遍历当前路径下所有的文件夹,这样可能会把应用消息文件里存在的消息ID重复放入项目消息文件中。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#437 | 
     
 2010-04-27 13:44:01 
 | 
     
 需要做的就是进入正确的目录—— <literal>conf/locale</literal> (在源码树的情况下)或者 <literal>locale/</literal> (在应用程序信息或项目信息的情况下)所在的目录下。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#436 | 
     
 2010-04-27 13:34:06 
 | 
     
 要创建信息文件,也是使用 <literal>django-admin.py makemessages.py</literal> 工具,和Django信息文件一样。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#401 | 
     
 2010-04-27 13:30:41 
 | 
     
 格式被模板标签<literal>now</literal>用来识别格式字符串。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#400 | 
     
 2010-04-27 13:29:06 
 | 
     
 例如,对于 DATETIME_FORMAT (或 DATE_FORMAT 、 TIME_FORMAT ),应该提供希望在该语言中使用的格式化字符串。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#399 | 
     
 2010-04-27 13:28:29 
 | 
     
 这些信息ID的翻译与其他信息不同:你需要提供其对应的本地化内容。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#398 | 
     
 2010-04-27 13:27:52 
 | 
     
 技术相关的信息ID很容易被认出来:它们都是大写的。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#390 | 
     
 2010-04-27 13:26:39 
 | 
     <literal>ugettext()</literal>。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#389 | 
     
 2010-04-27 13:26:00 
 | 
     
 这样做的话, <literal>make-messages.py</literal> 仍会寻找并标记出将要被翻译的这些字符串,但翻译不会在运行时进行,故而需要在任何使用 <emphasis>LANGUAGES</emphasis> 的代码中用“真实的”
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#386 | 
     
 2010-04-27 13:24:51 
 | 
     
 下是一个settings文件的例子:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#385 | 
     
 2010-04-27 13:24:40 
 | 
     
 解决方案就是使用一个“虚假的” <literal>gettext()</literal> 。以
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#349 | 
     
 2010-04-27 13:19:39 
 | 
     
 如果你使用<literal>CacheMiddleware</literal>,把<literal>LocaleMiddleware</literal>放在它后面。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#343 | 
     
 2010-04-27 13:17:04 
 | 
     
 中间件的顺序是有影响的,最好按照依照以下要求:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#342 | 
     
 2010-04-27 13:16:50 
 | 
     
 使用 <literal>LocaleMiddleware</literal> 需要在 <literal>MIDDLEWARE_CLASSES</literal> 设置中增加 <literal>'django.middleware.locale.LocaleMiddleware'</literal> 。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#323 | 
     
 2010-04-27 11:27:33 
 | 
     
 这个工具作用于所有有效的 <literal>.po</literal> 文件,创建优化过的二进制 <literal>.mo</literal> 文件供 <literal>gettext</literal> 使用。在你可以运行<literal>django-admin.py makemessages</literal>的目录下,运行<literal>django-admin.py compilemessages</literal>:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#321 | 
     
 2010-04-27 11:24:47 
 | 
     
 创建信息文件之后,每次对其做了修改,都需要将它重新编译成一种更有效率的形式,供 <literal>gettext</literal> 使用。可以使用<literal>django-admin.py compilemessages</literal>完成。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter19/#316 | 
     
 2010-04-27 11:02:32 
 | 
     
 若要对新创建的翻译字符串校验所有的源代码和模板,并且更新所有语言的信息文件,可以运行以下命令:
 | 
      |