一段时间以来,我一直在学习 PHP 和 MySQL 的(基础知识),并且我已经调整/构建了一些我非常满意的东西——当然要感谢 StackOverflow,因为它是一个很棒的学习场所。不过,我现在很困惑,所以我希望你能指出我正确的方向。
我已经阅读了所有关于用户输入带来的 XSS 和 SQL 注入风险的粗体大写,我打算始终保持谨慎。到目前为止,我试图从客户那里获得最少的队列,并尽可能坚持基本的比较;但现在我正在做一个需要处理一堆文本(以及一些下拉菜单)的项目。
到目前为止,我有一个像这样工作的测试骡子:
用户设置下拉菜单,输入一段文本(进入 textarea),提交表单。
处理程序页面将表单数据回显给用户以进行确认,并在此页面上填充另一个表单的隐藏值,该表单使用“确认”按钮提交。
- 'Final' 处理程序执行 mysql_query 以插入包含已处理表单数据的行。
本质上,我想获取一个$submittedText
字符串,并对其进行修改,以使恶意输入对于确认预览(回显)和插入 MySQL 数据库都无害;但至关重要的是,保留用户无意中输入文本区域的任何换行符。
我一直在使用:
<?php
$submittedText = $_POST['Text'];
$processedText = nl2br(htmlentities($submittedText, ENT_QUOTES, 'UTF-8'));
echo $processedText;
?>
...为了我的确认,这似乎使我扔给它的任何东西都安全,当我通过时$processedText
,mysql_real_escape_string
我没有得到任何数据库讨厌;当我想把它重新拿出来时,我的问题就来了……
我想我可以使用:
$processedOutput = strip_tags($databaseText, '<br>');
...这会捕获任何 HTML/<script>
标签,但如果<?php // ?>
从数据库读取的文本中有任何内容,它会在运行我的 PHP 时由预处理器解析,这至少会产生意想不到的结果,并且可能用于封装其他讨厌的。我在否定恶意输入方面取得的任何更多成功往往会终止换行符。
如果有人能指出我正确的方向,我将永远感激不尽。
非常感谢,
抢。