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
Security 为什么建议对Wordpress Customizer选择框、复选框和单选按钮进行消毒?_Security_Sanitization_Input Sanitization_Wordpress - Fatal编程技术网

Security 为什么建议对Wordpress Customizer选择框、复选框和单选按钮进行消毒?

Security 为什么建议对Wordpress Customizer选择框、复选框和单选按钮进行消毒?,security,sanitization,input-sanitization,wordpress,Security,Sanitization,Input Sanitization,Wordpress,亲爱的Wordpress开发者: 我一直无法找到这个问题的明确答案,这是由贾里德关于主题化和主题定制的主题基础所启发的。特别是,这里引用了后者的一句话: 如果输入为1(表示复选框),则函数 返回一个1。如果输入是任何其他内容,则函数 返回一个空白字符串。这可以防止任何有害的东西被破坏 保存到数据库中 最后一句话是关于防止有害的东西被保存到数据库中,我想这是我们大家都同意的。但我不明白的是,既然只有两个可能的值,你怎么能从复选框中得到有害的东西——除非你犯了编程错误 所以,如果在这种情况下进行清理

亲爱的Wordpress开发者:

我一直无法找到这个问题的明确答案,这是由贾里德关于主题化和主题定制的主题基础所启发的。特别是,这里引用了后者的一句话:

如果输入为1(表示复选框),则函数 返回一个1。如果输入是任何其他内容,则函数 返回一个空白字符串。这可以防止任何有害的东西被破坏 保存到数据库中

最后一句话是关于防止有害的东西被保存到数据库中,我想这是我们大家都同意的。但我不明白的是,既然只有两个可能的值,你怎么能从复选框中得到有害的东西——除非你犯了编程错误

所以,如果在这种情况下进行清理是为了防止由于编程错误导致的“数据损坏”,我不知道这是好事还是坏事

我认为,只有当您的输入是文本或文本字段时,才有必要对数据进行清理,至少当您的目标是防止有害内容时是这样。我知道你有时需要格式化数据以使其有用,但这是另一个主题

最后一句话是关于防止有害的东西被保存到 数据库是我们都同意的东西

问题是,“有害”在很大程度上与上下文有关。数据库中的JavaScript本身并不有害——只有在另一个用户的会话中输出为HTML时才是有害的。结果是,通过输出编码可以更好地处理此类漏洞(XSS)。也就是说,当内容输出到页面时,它应该是HTML编码的。这将使脚本标记输出为
script
只会将文本
实际输出到显示的页面

但我不明白的是你怎么能从一个 复选框-除非出现编程错误-因为只有 两个可能的值

如果攻击者操纵发布的数据,则不会。例如,如果您的复选框定义为

<input type="checkbox" name="agreeToTCs" />
在HTML和选中的框中

为什么建议对Wordpress Customizer选择框进行消毒, 复选框和单选按钮

所有这些归结起来就是,您的应用程序应该只处理有效数据。作为一个简单的示例,想象一个系统,它允许您在创建新用户时为新用户选择一个用户级别。系统设计的一部分仅允许您指定一个等于或低于您自己的用户。这是为了防止低级别用户创建管理员帐户,然后获得完全权限。假设您以中级用户身份登录,则下拉列表的HTML可能呈现如下:

<select name="userLevel">
  <option value="low">low</option>
  <option value="medium">medium</option>
</select>

低的
中等的

并在将其发布到服务器时发送,例如
userLevel=medium
。但是,攻击者可以将发布的数据操纵到
userlevel=admin
,并将自己创建为管理员用户。回发时再次“清理”复选框可确保应用程序只接受有效值。

我明白了。所以,我想它真正归结起来就是攻击者可以截获post数据并插入他/她自己的值。我可以想象这样的XSS攻击,是由浏览器开发人员不断解决和处理的,但如果攻击者能够真正控制插入和操作输入类型等的值,我可以想到不止一种情况,输入净化是徒劳的。假设我输入了字体大小。如果数据有效性是这里的目标,我想16和200都会通过。但是,其中一个可能会毁掉一个网站。XSS的预防实际上取决于网站开发人员,而不是浏览器开发人员。但是,支持CSP和XSS保护头的浏览器可能会有所帮助。在您的示例中,输入清理并不是徒劳的,您只需验证字体大小是否合理(例如,唯一的问题是,对于试图获得30以上字体大小的合法用户来说,这将破坏用户体验(他们存在,我知道他们存在)。但即便如此,这也是一个角度问题。在我的书中,如果攻击者试图将某个值更改为与我设置的值不同的值(即使该值低于可接受的边界),那么网站也会受到威胁。如果我将其设置为16,并期望它为16,那么25将不起作用。你明白我所说的无效吗?我不确定我是否遵循。如果你不想要值b更改后,您为什么要将其传递到客户端?我明白您的意思。这需要的不仅仅是验证,也就是整个站点的安全性。我的答案集中在当前用户(攻击者)可以做些什么来危害站点(或使用站点的其他用户),而只需更改攻击者自己会话中的数据(如POST数据).
<select name="userLevel">
  <option value="low">low</option>
  <option value="medium">medium</option>
</select>