PDO Prepared Statement允许执行javascript
PDO Prepared Statement allows javascript to be executed
我真的很困惑于PDO准备好的语句。我按照php.net文档中的说明做了所有事情。当我将JavaScript插入数据库,然后查询数据库并在页面上输出结果时,它会向我发出数据库上的JavaScript警报。
PDO是否保护用户数据免受这种类型的攻击,或者我们是否必须自己进行清理和转义,或者这里缺少什么。
<?php
try {
$db = new PDO('mysql:host=localhost;dbname=test', "root", "");
} catch ( PDOException $e ) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
$query = $db->query('SELECT * from users');
if( $query->rowCount() ){
$rows = $query->fetchAll( PDO::FETCH_OBJ);
foreach( $rows as $row ){
echo $row->user_name;
echo "<br/>";
}
} else {
echo "No results found";
}
$user_name = "<script type='"text/javascript'">alert('"Works'");</script>";
$user_email = "example@gmail.com";
$user_password = "password";
$user_status = "1";
$data = array(
":user_name" => $user_name,
":user_email" => $user_email,
":user_password" => $user_password,
":user_status" => $user_status
);
$sql = "INSERT INTO users (user_name, user_email, user_password, user_status) VALUES(:user_name, :user_email, :user_password, :user_status)";
$prepare = $db->prepare($sql);
$exec = $prepare->execute($data);
?>
当您使用准备好的语句并参数化SQL时,PDO可以防止SQL注入攻击。
但是您描述的是一种叫做跨站点脚本(XSS)的东西。这是一个完全不同的安全问题。它不依赖于SQL或数据库内容。您可以使用任何应用程序数据创建XSS漏洞,但不限于来自数据库的数据。XSS和SQL注入一样,对所有程序员来说都很重要。
你可能已经看到了关于如何在PHP中防止SQL注入的高评价帖子:
- 如何防止PHP中的SQL注入
但这里有一些关于XSS防御的好帖子:
- 在PHP站点中避免xss攻击的最佳实践是什么
- 如何用HTML/PHP防止XSS
- HTML编码可以防止各种XSS攻击吗
SQL注入和跨站点脚本一直是在web上暴露数据的前两个安全错误。请参阅OWASP十大关键安全风险列表:https://www.owasp.org/index.php/OWASP_Top_Ten_Project
访问OWASP网站。有很多资源可以了解安全风险以及如何解决这些风险。而且是免费的!
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 在Safari执行javascript之前对其进行修改
- 如何在执行此特定onclick事件时执行JavaScript函数
- 如何在从浏览缓存加载页面时执行javascript
- 使用Rhino和ASE执行Javascript的区别
- 如何在加载完整页面后严格执行javascript代码
- 在动态加载的对话框中执行Javascript
- 在Sinatra中执行Javascript
- 通过AJAX加载页面并执行javascript和CSS
- 适用于多种浏览器的Selenium-需要能够执行javascript的webDriver
- 如何在seleniumwebdriver中执行javascript提示并等待接受输入
- 在window.open()生成的窗口中执行JavaScript
- AJAX成功回调-执行javascript时出现问题
- 通过指令在控制器中执行javascript函数
- 从React Native Android原生地执行JavaScript代码
- iframe未执行Javascript方法(PHP)
- 执行JavaScript代码,使用selenium webdriver或WatiN从控制台获取日志
- 通过web驱动程序异步执行Javascript
- 如何在长时间执行JavaScript期间显示微调器
- 点击困难时执行javascript函数