如何正确地转义HTML属性内的引号?
我有一个网页下拉,当价值string包含一个报价。
值是"asd
但在DOM中总是显示为空string。
我已经尽了各种方法试图逃避绳子,但无济于事。
<option value=""asd">test</option> <option value="\"asd">test</option> <option value=""asd">test</option> <option value=""asd">test</option>
任何想法如何在页面上呈现这样的回发消息包含正确的值?
"
是正确的方法,你的testing的第三个:
<option value=""asd">test</option>
你可以在这里看到一个jsFiddle的例子。 或者,您可以用单引号分隔属性值:
<option value='"asd'>test</option>
如果您使用PHP,请尝试调用htmlentities
或htmlspecialchars
函数。
另一个select是用单引号replace双引号,如果你不介意的话。 但是我不提这个:
<option value='"asd'>test</option>
我提到这个:
<option value="'asd">test</option>
在我的情况下,我用这个解决scheme。
根据HTML语法 ,甚至HTML5 ,以下都是有效的选项:
<option value=""asd">test</option> <option value=""asd">test</option> <option value='"asd'>test</option> <option value='"asd'>test</option> <option value='"asd'>test</option> <option value="asd>test</option> <option value="asd>test</option>
请注意,如果您使用XML语法 ,则需要引号(单个或双个)。
这是一个jsfiddle显示所有上述工作 。
你真的应该只允许不受信任的数据进入一个好的属性的白名单,比如:align,alink,alt,bgcolor,border,cellpadding,cellspacing,class,colours,colspan,coords,dir,face,height,hspace,ismap,lang ,marginheight,marginwidth,multiple,nohref,noresize,noshade,nowrap,ref,rel,rev,rows,rowspan,滚动,shape,span,summary,tabindex,title,usemap,valign,value,vlink,vspace,width
你真的想保持不受信任的数据的JavaScript处理程序以及ID或名称属性(他们可以打破DOM中的其他元素)。
此外,如果您将不可信数据放入SRC或HREF属性,那么它确实是一个不可信的URL,因此您应该validationURL,确保其不是javascript:URL,然后是HTML实体编码。
更多细节在这里: https : //www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet