我可以使用 mysqli_prepare() 阻止 运行 javascript 作为我的 php 网站上的输入吗
Can I prevent running javascript as input on my php website using mysqli_prepare()
我正在使用 mysql_prepare() 函数来避免在我的网站上进行 SQL 注入。
我想知道它是否有效!!
当我使用<script>alert("something")</script>
作为其中一个字段的输入时,脚本进入我的数据库,我想知道这是否正常!?!
我是不是漏掉了什么?
或者 prepare 函数只是避免 SQL 注入。
不,您不能通过使用参数化查询来阻止在您的页面上执行 JavaScript。
使用参数化查询的全部目的是防止您的 SQL 在提供意外输入时中断。当您将数据与 SQL 分开绑定时,数据就不可能影响 SQL。例如:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$mysqli->set_charset('utf8mb4'); // always set the charset
$email = '1 or 1=1';
$stmt = $mysqli->prepare('SELECT user FROM users WHERE email=?');
$stmt->bind_param('s', $email);
$stmt->execute();
在此示例中,电子邮件看起来像 SQL,但 MySQL 服务器永远不会将其视为 SQL。它是单独绑定的,所以 MySQL 在解析 SQL 之后就已经接收到它了。这有助于防止 SQL 注入。 永远不要转义您绑定的数据!
如您所见,准备好的语句仅保护 SQL。它们不会防止用户将 JavaScript 或 HTML 代码提交到您的数据库中。您需要添加额外的验证规则或将其视为任何其他数据。
为了防止 JavaScript 或 HTML 或任何其他数据破坏您的网站,您需要确保在输出时始终遵循最佳实践。您必须始终正确设置数据格式。
- 对于HTML输出数据时使用
htmlentities()
or htmlspecialchars()
- 对于 JavaScript 使用
json_encode()
- 对于 URL 使用
http_build_query()
- 等等
我正在使用 mysql_prepare() 函数来避免在我的网站上进行 SQL 注入。 我想知道它是否有效!!
当我使用<script>alert("something")</script>
作为其中一个字段的输入时,脚本进入我的数据库,我想知道这是否正常!?!
我是不是漏掉了什么?
或者 prepare 函数只是避免 SQL 注入。
不,您不能通过使用参数化查询来阻止在您的页面上执行 JavaScript。
使用参数化查询的全部目的是防止您的 SQL 在提供意外输入时中断。当您将数据与 SQL 分开绑定时,数据就不可能影响 SQL。例如:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$mysqli->set_charset('utf8mb4'); // always set the charset
$email = '1 or 1=1';
$stmt = $mysqli->prepare('SELECT user FROM users WHERE email=?');
$stmt->bind_param('s', $email);
$stmt->execute();
在此示例中,电子邮件看起来像 SQL,但 MySQL 服务器永远不会将其视为 SQL。它是单独绑定的,所以 MySQL 在解析 SQL 之后就已经接收到它了。这有助于防止 SQL 注入。 永远不要转义您绑定的数据!
如您所见,准备好的语句仅保护 SQL。它们不会防止用户将 JavaScript 或 HTML 代码提交到您的数据库中。您需要添加额外的验证规则或将其视为任何其他数据。
为了防止 JavaScript 或 HTML 或任何其他数据破坏您的网站,您需要确保在输出时始终遵循最佳实践。您必须始终正确设置数据格式。
- 对于HTML输出数据时使用
htmlentities()
orhtmlspecialchars()
- 对于 JavaScript 使用
json_encode()
- 对于 URL 使用
http_build_query()
- 等等