首页 > 解决方案 > ajax jquery在onclick事件jquery中将字符串作为参数传递

问题描述

echo "<button onClick='follow(".$name.");'></button>";

我需要在follow(user)函数onClick事件jquery中传递一个字符串作为参数。但它被称为一个值。

我尝试了一切,但在 php 中它看起来对我来说有点大不了。有没有其他方法可以从 php 变量中获取预期结果作为字符串。

标签: phpjqueryajaxrest

解决方案


引号是关闭的,如果你传递一个字符串,你需要在函数调用中用引号包裹字符串。

"对于html 属性中的标准,有多种方法可以做到这一点:

echo '<button onClick="follow(\''.$name.'\')"></button>';

echo "<button onClick=\"follow('".$name."')\"></button>";

echo "<button onClick=\"follow('$name')\"></button>";

对于单引号

echo '<button onClick=\'follow("'.$name.'")\'></button>';

echo "<button onClick='follow(\"".$name."\")'></button>";

echo "<button onClick='follow(\"$name\")'></button>";

但这是假设你的用户很好,一个狡猾的用户可能会在其中创建一个用户名\n,然后从 POST 到存储和检索它很可能会呈现为一个新行:

<?php
$name = "Foo\nBar";
echo '<button onClick="follow(\''.$name.'\')"></button>'; 

呈现以下会导致页面中断的内容:

<button onClick="follow('Foo
Bar')"></button>

或者更糟糕的用户名​​,如:

$name = "Foo')\"></button>\n<button onClick=\"window.location.href = ('http://example.com";

这将呈现存储的 XSS:

<button onClick="follow('Foo')"></button>
<button onClick="window.location.href = ('http://example.com')"></button>

因此,一个更好的解决方案是直接传递它,将它转义,使用htmlentitieshtml不渲染它json_encode\n

echo '<button onClick=\'follow('.json_encode(htmlentities($name, ENT_QUOTES, 'UTF-8')).')\'></button>';

这将呈现为:

<button onClick='follow("Foo&#039;)&quot;&gt;&lt;\/button&gt;\n&lt;button onClick=&quot;window.location.href = (&#039;http:\/\/example.com")'></button>

尽管您应该在允许此类攻击之前在创建时验证用户名。


推荐阅读