Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 是否需要修改编号来屏蔽查询字符串中的Id?_Security_Urlhacks - Fatal编程技术网

Security 是否需要修改编号来屏蔽查询字符串中的Id?

Security 是否需要修改编号来屏蔽查询字符串中的Id?,security,urlhacks,Security,Urlhacks,我的同事坚持认为使用全局修改号来屏蔽查询字符串ID是个好主意 public static readonly int ModificationNumber = 9081234; 以及其他地方: _addressID = Convert.ToInt32(Request.QueryString["AddressId"]) - ModificationNumber; 我似乎无法理解这件事。如果有人想尝试一些url攻击,那么修改号根本没有区别 是否有其他原因使网站更安全 此外,有没有明确的原因说明这是

我的同事坚持认为使用全局修改号来屏蔽查询字符串ID是个好主意

public static readonly int ModificationNumber = 9081234;
以及其他地方:

_addressID = Convert.ToInt32(Request.QueryString["AddressId"]) - ModificationNumber;
我似乎无法理解这件事。如果有人想尝试一些url攻击,那么修改号根本没有区别

是否有其他原因使网站更安全


此外,有没有明确的原因说明这是不好的?在我看来,全球化越少越好。

IMVHO你的同事走上了正确的道路,但并不完全正确

遵循的一个好规则是,永远不要在查询字符串中公开实际的ID,因为这会提供有关数据库结构的线索,并使某人更容易执行SQL注入类型攻击(他们可以针对特定记录,因为他们知道ID)

因此,你的同事正试图实现这一目标,尽管是以一种非常迂回的方式。就我个人而言,我不会这样做,因为聪明的攻击者知道你在做什么,然后知道魔法数字是什么只是时间问题。它也不能真正阻止针对特定记录的SQL注入攻击,因为生成的数字可能与现有密钥匹配。如果您依赖此方法来避免SQL攻击,则需要解决更深层次的问题

编辑 提及替代方案可能是一件公平的事情。 当您使用C#并从querystring中提取参数时,我假设您使用的是ASP.NET。在这种情况下,重要的ID可以保存在会话或缓存中。您可以在自定义数据对象中存储一组项,然后将其存储在会话中(这样就不必跟踪大量ID,您只需要知道一个ID)。ASP.NET为您管理web应用程序的会话,它对每个用户都是唯一的,当您从一个页面转换到另一个页面时,您可以使用它来存储内容


如果手动跟踪会话或使用数据库保留会话相关信息,则仍然可以使用生成的GUID作为键将上述数据对象序列化到数据库中,并将该GUID附加到查询字符串中(如果用户尝试使用GUID并假设其他人的会话,那么成功的几率非常低,您可以通过将两个GUID连接为密钥等方式进一步降低成功的几率。)

IMVHO您的同事是在正确的轨道上,但不完全正确

遵循的一个好规则是,永远不要在查询字符串中公开实际的ID,因为这会提供有关数据库结构的线索,并使某人更容易执行SQL注入类型攻击(他们可以针对特定记录,因为他们知道ID)

因此,您的同事正试图实现这一点,尽管是以一种非常全面的方式。就个人而言,我不会这样做,因为聪明的攻击者知道您在做什么,然后知道神奇的数字是什么只是时间问题。它也不能真正阻止针对特定对象的SQL注入攻击记录,因为生成的数字可能与现有密钥相匹配。如果您依靠此方法避免SQL攻击,则需要解决更深层次的问题

编辑 提及替代方案可能是一件公平的事情。 当您使用C#并从查询字符串中提取参数时,我假设您使用的是ASP.NET。在这种情况下,重要的ID可以保存在会话或缓存中。您可以将一组项存储在自定义数据对象中,然后将其存储在会话中(这样可以避免跟踪大量ID,您只需要知道一个).ASP.NET为您管理web应用程序的会话,它对每个用户都是唯一的,当您从一个页面切换到另一个页面时,您可以使用它来存储内容


如果手动跟踪会话或使用数据库保留会话相关信息,则仍然可以使用生成的GUID作为键将上述数据对象序列化到数据库中,并将该GUID附加到查询字符串中(如果用户尝试使用GUID并假设其他人的会话,成功的几率非常低,您可以通过将两个GUID连接为密钥等方式进一步降低成功的几率。)

他的姓是凯撒吗?他的姓是凯撒吗?看起来混淆查询字符串有好处(限制数据库结构的暴露),但也有更好的技术。谢谢。提供一种替代方法,例如加密,我很乐意接受你的答案。@Jim,答案已经扩展。希望它能有所帮助。模糊查询字符串似乎有好处(限制数据库结构的暴露),但也有更好的技术。谢谢。请提供另一种方法,例如加密,我很乐意接受您的答案。@Jim,答案已扩展。希望对您有所帮助。