当在 Burp Suite 或任何类似工具中拦截表单提交时,是否有办法隐藏已发布的表单数据
Is there a way to hide the posted Form data when the form submit is intercepted in Burp Suite or any similar tool
有没有办法隐藏回传到表单上的键和值submit.As黑客可以使用安全测试工具(例如 burp 套件)篡改这些键值?
使用 HTTPS 而不是 HTTP。 HTTPS 将阻止中间人攻击并防止攻击者看到纯文本。
这假定您正在尝试防止恶意用户修改值 - 如果您只是想防止中间人攻击,请按照 Richard 的建议使用 HTTPS。
假设您希望用户能够 post 值,简短的回答是否定的。
如果您不希望用户能够修改这些值,则只需将它们存储在会话状态中,不要 return 将它们提供给用户(或者如果您从会话中读回它们)需要它们在客户端和服务器之间传递。
您还可以在服务器端验证 returned 数据,即删除标签等。
从本质上讲,您不能相信客户提供的数据。 HTTPS 不会阻止恶意用户拦截请求并将其名字更改为 "alert(1)"(例如)。
如果用户需要提供值,请检查它们是否安全并符合您在服务器端的内容规则。始终在服务器端检查授权等,不要相信用户提供的数据。
您无法阻止恶意用户在数据发送到您的服务器之前对其进行修改,但您可以在服务器使用数据之前对其进行验证。
虽然 HTTPS 用于保护传输中的数据,但没有切实可行的方法来防止用户篡改其计算机上的数据。几乎每个现代浏览器现在都有内置或附加的开发人员工具,允许用户暂停脚本执行、更改客户端脚本变量、修改 HTML 等。
可以用于从客户端到服务器来回往返且不会更改的数据(例如 UserID)的一种方法是在发送之前加密数据,然后当它 return 发送到服务器时解密。另一种机制是采用预期不会更改的所有往返值,并针对它们计算哈希值,该哈希值可以存储在页面上的隐藏字段中。然后当他们 return 时,重新计算散列并确保一切匹配。然后 "BobLimitedUser" 无法在不破坏散列的情况下通过操纵 HTML 将他的用户名更改为 "Administrator"。
综上所述,基本事实很简单,您应该将来自不受您控制的系统的数据视为不受信任。最终输入验证应始终在服务器端执行(除了执行的任何客户端验证之外)。由于此 "double validation" 要求,对于复杂的验证例程,我实际上将使用 webservice/AJAX 调用来执行客户端验证。然后我的客户端脚本和我的服务器代码可以简单地调用相同的例程,一次在提交期间,一次在提交之后。
如果您采用在两端验证所有输入的方法(可以这么说),那么篡改真的不应该成为问题。如果 BobLimitedUser 想要操纵 HTML 以便他可以将下拉列表值从一个值更改为他有权访问的另一个值,那就是他的时间浪费了。如果他设法将某些内容更改为导致数据完整性或安全问题的值,这就是服务器端验证要防止的问题。
简而言之
- 永远不要相信客户端脚本生成的任何东西。它太容易操作了(或者甚至有一些旧脚本被浏览器缓存,变得过时,破坏了一些东西)
- 客户端验证用于响应性和可用性。服务器端验证是为了数据完整性和安全性
- 不要将敏感信息传递给客户端并相信它会完好无损地返回。如果必须,则使用加密来保护它,或使用散列来验证它。
- 甚至不必费心尝试 encrypt/hash 填充客户端
- 在传输过程中使用 HTTPS 保护数据
- 实施 logging/alerting 个与安全相关的错误。这样,如果您每天都收到 BobLimitedUser 试图利用您的应用程序的警报,您可以与您的 IT 安全部门联系并从他的机器中删除病毒,或者可以适当地处理他
数据验证是一个重要的讨论话题,我建议您查看 OWASP 参考指南(信息太多,无法在此处复制):https://www.owasp.org/index.php/Data_Validation
最后一点要考虑...如果您有客户端脚本应用程序,那么我假设您正在使用 AJAX 和 Web 服务来传输数据。无论您编写什么客户端脚本,是什么阻止恶意用户简单地使用类似 Fiddler 的东西来绕过客户端脚本和浏览器本身,直接向您的 Web 服务发送请求?确保安全的唯一方法是在服务器上验证所有内容。
当 Burp Suite 用作代理服务器时,它允许用户操纵通过它的流量,即在网络浏览器(即客户端和网络服务器)之间。这通常称为中间人 (MITM) 类型的攻击架构。
我的建议是在客户端加密你想保持不被篡改的数据,并在将其发布到服务器之前将其单独存储在隐藏的表单字段中,然后在服务器端解密并比较它带有发布到服务器的值(可能已被中间人篡改的数据)。
这样您就可以知道您想要保护的数据是否发生了任何变化。
P.S: 正如此处几乎所有答案中所述,在这种情况下强烈建议使用 HTTPS。
有没有办法隐藏回传到表单上的键和值submit.As黑客可以使用安全测试工具(例如 burp 套件)篡改这些键值?
使用 HTTPS 而不是 HTTP。 HTTPS 将阻止中间人攻击并防止攻击者看到纯文本。
这假定您正在尝试防止恶意用户修改值 - 如果您只是想防止中间人攻击,请按照 Richard 的建议使用 HTTPS。
假设您希望用户能够 post 值,简短的回答是否定的。
如果您不希望用户能够修改这些值,则只需将它们存储在会话状态中,不要 return 将它们提供给用户(或者如果您从会话中读回它们)需要它们在客户端和服务器之间传递。
您还可以在服务器端验证 returned 数据,即删除标签等。
从本质上讲,您不能相信客户提供的数据。 HTTPS 不会阻止恶意用户拦截请求并将其名字更改为 "alert(1)"(例如)。
如果用户需要提供值,请检查它们是否安全并符合您在服务器端的内容规则。始终在服务器端检查授权等,不要相信用户提供的数据。
您无法阻止恶意用户在数据发送到您的服务器之前对其进行修改,但您可以在服务器使用数据之前对其进行验证。
虽然 HTTPS 用于保护传输中的数据,但没有切实可行的方法来防止用户篡改其计算机上的数据。几乎每个现代浏览器现在都有内置或附加的开发人员工具,允许用户暂停脚本执行、更改客户端脚本变量、修改 HTML 等。
可以用于从客户端到服务器来回往返且不会更改的数据(例如 UserID)的一种方法是在发送之前加密数据,然后当它 return 发送到服务器时解密。另一种机制是采用预期不会更改的所有往返值,并针对它们计算哈希值,该哈希值可以存储在页面上的隐藏字段中。然后当他们 return 时,重新计算散列并确保一切匹配。然后 "BobLimitedUser" 无法在不破坏散列的情况下通过操纵 HTML 将他的用户名更改为 "Administrator"。
综上所述,基本事实很简单,您应该将来自不受您控制的系统的数据视为不受信任。最终输入验证应始终在服务器端执行(除了执行的任何客户端验证之外)。由于此 "double validation" 要求,对于复杂的验证例程,我实际上将使用 webservice/AJAX 调用来执行客户端验证。然后我的客户端脚本和我的服务器代码可以简单地调用相同的例程,一次在提交期间,一次在提交之后。
如果您采用在两端验证所有输入的方法(可以这么说),那么篡改真的不应该成为问题。如果 BobLimitedUser 想要操纵 HTML 以便他可以将下拉列表值从一个值更改为他有权访问的另一个值,那就是他的时间浪费了。如果他设法将某些内容更改为导致数据完整性或安全问题的值,这就是服务器端验证要防止的问题。
简而言之
- 永远不要相信客户端脚本生成的任何东西。它太容易操作了(或者甚至有一些旧脚本被浏览器缓存,变得过时,破坏了一些东西)
- 客户端验证用于响应性和可用性。服务器端验证是为了数据完整性和安全性
- 不要将敏感信息传递给客户端并相信它会完好无损地返回。如果必须,则使用加密来保护它,或使用散列来验证它。
- 甚至不必费心尝试 encrypt/hash 填充客户端
- 在传输过程中使用 HTTPS 保护数据
- 实施 logging/alerting 个与安全相关的错误。这样,如果您每天都收到 BobLimitedUser 试图利用您的应用程序的警报,您可以与您的 IT 安全部门联系并从他的机器中删除病毒,或者可以适当地处理他
数据验证是一个重要的讨论话题,我建议您查看 OWASP 参考指南(信息太多,无法在此处复制):https://www.owasp.org/index.php/Data_Validation
最后一点要考虑...如果您有客户端脚本应用程序,那么我假设您正在使用 AJAX 和 Web 服务来传输数据。无论您编写什么客户端脚本,是什么阻止恶意用户简单地使用类似 Fiddler 的东西来绕过客户端脚本和浏览器本身,直接向您的 Web 服务发送请求?确保安全的唯一方法是在服务器上验证所有内容。
当 Burp Suite 用作代理服务器时,它允许用户操纵通过它的流量,即在网络浏览器(即客户端和网络服务器)之间。这通常称为中间人 (MITM) 类型的攻击架构。
我的建议是在客户端加密你想保持不被篡改的数据,并在将其发布到服务器之前将其单独存储在隐藏的表单字段中,然后在服务器端解密并比较它带有发布到服务器的值(可能已被中间人篡改的数据)。
这样您就可以知道您想要保护的数据是否发生了任何变化。
P.S: 正如此处几乎所有答案中所述,在这种情况下强烈建议使用 HTTPS。