如何加密django模板中url中传递的参数

时间:2013-05-16 15:30:44

标签: django templates encryption

我需要加密从模板传递到django中的id。 实际上,user_id必须在url中加密,因此没有人可以在url中传递id 这段代码。

<tr>    
{% with user_id=item.user_id %}
#user_id have to be encrypted                                   
<td><center><a href="{% url "accounts" user_id %}">{{ item.Company_name }}</a></center></td>
{% endwith %}

我一直在寻找一段时间,但我没有找到如何加密模板中的参数。

2 个答案:

答案 0 :(得分:1)

好吧,如果encrypt正是您的意思,我不会这样做。我的意思是,使用say md5加密字符串将无法在服务器端为您解密字符串。为此,您应该使用encode,例如使用base64编码系统。这将用编码的字符串替换id,但有人savvy可能会注意到这一点并解码您的网址中的字符串。

您在这里要完成的是通过默默无闻的安全性,这是不推荐的。您可以应用此技术,但您最好在代码中添加更多安全性,例如权限和类似的东西。

要对您的用户ID进行编码,您可以将此方法添加到Item类:

class Item

    ...

    def encoded_id(self):
        import base64
        return base64.b64encode(str(self.user_id))

    def decode_id(self, id):
        import base64
        return base64.b64decode(id)

    ...

这样你就可以在你的观点中做到这一点:

<tr>    
{% with user_id=item.encoded_id %}
#user_id have to be encrypted                                   
<td><center><a href="{% url "accounts" user_id %}">{{ item.Company_name }}</a></center></td>
{% endwith %}

您将使用base64中编码的id网址。

之前要注意我的警告。 你永远不应该只依赖于此,这是一种有效的做法,但要记住编码可以颠倒。

希望这有帮助!

答案 1 :(得分:1)

我认为保罗将加密与签名混为一谈。请查看Pycrypto以获取加密功能。