php安全,将密码类型转换为字符串

php安全,将密码类型转换为字符串,php,mysql,casting,passwords,Php,Mysql,Casting,Passwords,问题: 将提交的密码键入字符串是否安全? $b=(字符串)$a 评论: 我不想知道更有效的方法,我只想知道一种安全的方法。仅针对以下用例: 步骤1-注册密码(PW): 通过注册获得PW 把它串起来 要散列的字符串 在MYSQL中保存哈希 步骤2-登录信息,获取PW: 通过表格获取PW 把它串起来 从数据库获取哈希 两者比较 我想这是最简单的方法,但也是最安全的方法之一。我想让每一个角色都成为PW

问题: 将提交的密码键入字符串是否安全? $b=(字符串)$a

评论: 我不想知道更有效的方法,我只想知道一种安全的方法。仅针对以下用例:

步骤1-注册密码(PW):

  • 通过注册获得PW
  • 把它串起来
  • 要散列的字符串
  • 在MYSQL中保存哈希
  • 步骤2-登录信息,获取PW:

  • 通过表格获取PW
  • 把它串起来
  • 从数据库获取哈希
  • 两者比较
  • 我想这是最简单的方法,但也是最安全的方法之一。我想让每一个角色都成为PW

    为什么不是亚洲符号呢。 我认为:这个方法不应该给转义问题带来麻烦,因为不管是什么代码,现在都是字符串,只能与字符串进行比较。但我可以拥有所有的性格,没有危险。 Mysql数据库在设置为UTF8时应该允许每个字符,对吗? 所以请回答我:这个想法是不是头脑简单

    先谢谢你
    Gerd

    我不认为将密码强制转换为字符串会影响应用程序的整体安全性。从这个意义上说,我认为这个问题有点误导

    作为一个例子,说明为什么一个字符串不能真正帮助你或伤害你,考虑一个最常见的攻击数据库的向量:SQL注入。在网页上设置一个表单,该表单接受用户输入,将其发布到服务器端脚本,该脚本使用该用户输入构造查询,突然之间,您就容易受到攻击。因为所有SQL查询都是字符串,所以在这里,是否转换为字符串并不重要

    但是,如果您知道您需要一个表单(任何表单)中的字符串,而有人键入一个整数,该怎么办?试试这个

    制作包含以下内容的页面:

    <!DOCTYPE html>
    <html>
        <head><title></title></head>
        <body>
            <form method="POST" action="/test.php">
                <input type="text" name="testInput">
                <input type="submit">
            </form>
        </body>
    </html>
    
    然后在表单字段中输入一个整数,看看PHP为它输出了什么类型。这是我得到的输出:

    array (size=1)
      'testInput' => string '5.25' (length=4)
    
    因为不可能真正构造包含PHP对象的POST(JSON本身在解码之前只不过是一个字符串),所以我们只担心本地数据类型。如上所示,当PHP接收到非字符串输入时,即使是非字符串输入也将转换为字符串数据


    这并不是说数据来自哪里,不管是来自表单还是脚本,而是PHP如何接收数据并将其提供给您。我可以用执行cURL请求并接收相同输出的脚本的方式构造相同的“表单”。

    保存哈希将存储的密码减少为一组ASCII字符,但仍然允许任何/每个UTF-8字符作为登录表单的输入。但是,转换为字符串是不相关的,由于HTML表单中的所有输入都是字符串数据,因此不要担心这一点,而要担心对逻辑中的“字符串到散列”部分使用最安全的算法:使用该算法还将确保生成的是一个盐渍散列,它与输入的来源(表单、命令行参数、URL、JSON编码、CURL请求)相关它在PHP中是一个字符串,直到您做了一些更改it@GGolem请记住,由于您没有对用户名字段进行散列,因此在其中键入的恶意输入仍然可能会疯狂运行。我下面的答案应该只被认为是对你的具体问题(即第一行)的回答好吧,我想我同意它,就像我之前对GET所做的那样。也许我有错误的想法,下一次尝试:任何进来的都会被散列,没有问题-我只比较了两个散列,对吗?我想可能会发生这样的情况,我不得不再次使用字符串,并将其与恶意代码进行比较,然后一切都变得异常繁荣。是的,我很困惑,因为有太多的文字和太多的危险。谢谢大家!即使有人在密码字段中提交恶意代码,您也将对其进行哈希处理,这将不可撤销地更改该字符串的内容(希望这是一个好的哈希函数的最终目的)。一旦它与您的hash进行了哈希运算,只需将哈希值与存储在数据库中的哈希值进行比较。如果它们相等,则用户键入正确的密码。
    array (size=1)
      'testInput' => string '5.25' (length=4)