如何防止注入(html,php)
How can I prevent injection(html,php)?
可能重复:
在PHP站点中避免xss攻击的最佳实践是什么
我有一个<textarea>
和一个<input>
供我的网站评论。显然,我在接口页中echo
它们,并将它们插入到我的数据库中。
我想知道当一个人注入(例如)<img>
以损坏页面或发送查询以损坏数据库时,我该怎么办?
什么是简单的方法?
我曾尝试使用搜索< > ' " drop
,但尽管我使用了'"
而不是"
,但它不起作用,而且在PHP中,我遇到了错误。
手动搜索这些字符是最好的方法吗(PHP和Javascript)?
您试图实现的是防止某种形式的XSS(跨站点脚本攻击)攻击。你正试图阻止持久的变种:
持久(或存储)XSS漏洞是一个更具破坏性的漏洞跨站点脚本缺陷的变体:当数据攻击者提供的信息由服务器保存,然后永久保存显示在返回给其他用户的"正常"页面上常规浏览,没有正确的HTML转义。一个经典的例子这是允许用户在网上留言板上发帖HTML格式的消息供其他用户阅读。
有许多选择可以防止它们。OWASP有一个简洁的解释。。仔细查看并找出答案。但大多数情况下,这是一个非常大的问题,由个人单独处理。
最好的方法是使用HTMLPurifier,它既简单又容易。它可能有点慢。但是额外的处理是值得的
<?php
require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);
?>
PS:HTMLPurifier有"白名单"选项。利用这个优势。
例如,您可以微调允许的元素和属性,将相对URL转换为绝对URL,甚至可以进行自动分段输入文本它们分别是%HTML.Allowed、%URI.MakeAbsolute和%URI.Base和%AutoFormat.AutoParagraph。%Namespace.Directive命名约定翻译为:
$config->set('Namespace.Directive', $value);
例如
$config->set('HTML.Allowed', 'p,b,a[href],i'); $config->set('URI.Base', 'http://www.example.com'); $config->set('URI.MakeAbsolute', true); $config->set('AutoFormat.AutoParagraph', true);
编辑:
要回答您关于阻止格式错误的SQL注入攻击的问题,请参阅以下问题:如何在PHP中防止SQL注入?这个答案是
报价:
Use prepared statements and parameterized queries. These are SQL statements that sent to and parsed by the database server separately from any parameters.
If you use PDO you can work with prepared statements like this:
$preparedStatement = $db->prepare('SELECT * FROM employees WHERE name = :name');
$preparedStatement->execute(array(':name' => $name));
$rows = $preparedStatement->fetchAll();
where $db is a PDO object, see the PDO documentation. The mysqli class also provides parameterized queries.
我在使用时从未遇到过问题
$login = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|update|declare|exec|set|cast|$|#|%|&|'|'"|`|;|'*|--|'''')/"),"",trim(addslashes(htmlspecialchars(strip_tags($_POST['comment'])))));
使用addslashes($your_variable)
函数。这将在特殊字符之前添加反斜杠,并使用stripslashes($db_result)
来清除不需要的斜杠。http://php.net/manual/en/function.addslashes.php
您也可以使用mysql_real_eescape_string()http://php.net/manual/en/function.mysql-real-escape-string.php
- 通过点击-PHP/HTML发布列表中的选定值
- 在网格中显示来自 PHP [HTML 的数据库的数据]
- 我希望我的php/html网站上的JavaScript能够实时更新
- 我在firebug控制台中得到了index.php.html
- 如何从php/html检查网站是否已打开
- jQuery Slider PHP/HTML Problems
- PHP/HTML:下载PDF链接处理页面加载
- 如何在 php/html 表单中编写链接
- 从生成的 PHP-HTML 表中获取数据库值
- PHP/HTML:如果 url domain.co.uk/?debug 那么
- 免费的应用程序来混淆和缩小JavaScript / PHP / HTML for Mac
- PHP/html:即时搜索功能:无法搜索外语(例如中文)字符
- Php/HTML/css:链接不可点击
- 在 PHP HTML 中向后单击时显示除图像外的所有值
- POST with ajax, php, html
- jquery json PHP HTML 不显示结果
- PHP HTML 表单选择选项来填充文本字段 jQuery
- PHP & HTML Form with javascript onsubmit not executed
- PHP/HTML:将HTML变量保存在PHP会话变量中
- 如何将渲染的PHP+HTML代码转换为文本文件