php - ajax jquery在onclick事件jquery中将字符串作为参数传递
问题描述
echo "<button onClick='follow(".$name.");'></button>";
我需要在follow(user)函数onClick事件jquery中传递一个字符串作为参数。但它被称为一个值。
我尝试了一切,但在 php 中它看起来对我来说有点大不了。有没有其他方法可以从 php 变量中获取预期结果作为字符串。
解决方案
引号是关闭的,如果你传递一个字符串,你需要在函数调用中用引号包裹字符串。
"
对于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>
因此,一个更好的解决方案是直接传递它,将它转义,使用htmlentities
html不渲染它json_encode
。\n
echo '<button onClick=\'follow('.json_encode(htmlentities($name, ENT_QUOTES, 'UTF-8')).')\'></button>';
这将呈现为:
<button onClick='follow("Foo')"><\/button>\n<button onClick="window.location.href = ('http:\/\/example.com")'></button>
尽管您应该在允许此类攻击之前在创建时验证用户名。
推荐阅读
- android - 如何从 Service Android Q 启动 Activity
- django - 如何按数字顺序查询值?
- c# - 如果它是 C# 中其他进程的用户,则无法关闭数据库连接
- php - 如何使用 Eloquent 编写此查询
- javascript - 如何在特定域和 url 的 chrome 扩展中使用代理
- python - 如何解决python错误NotADirectoryError:[Errno 20]不是目录:
- angular - 未捕获的错误:找不到模块“tslib”| 将 Angular 项目版本 10 更新到 11
- c# - 以编程方式打开 Windows 10 Battery Flyout
- javascript - 如何将包含多个表格、输入框等的 HTML 转换为 Angular 中的 ExcelSheet?
- node.js - 我在哪里可以看到本地主机上的控制台日志以及何时部署该功能?