- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
任何人都可以为我指出有关为 HTML、JavaScript 和 PHP 转义用户提交内容的良好 StackOverflow 答案和其他资源(包括书籍)吗?
例如,假设用户在文本框中键入信息,然后单击提交按钮。然后通过JavaScript将文本写入页面的div中,同样通过GET发送给PHP,由PHP放入MySQL数据库。
我正在寻找一个很好的、广泛的、但也很详细的概述,涉及所有不同类型的转义。流程图也会有帮助!
谢谢!
谢谢!我正在寻找可以制作备忘单的人,其中包含 1) 转义以显示 html,2) 转义以放入 URL 3),将 URL 发送到 PHP,4) 将 URL 中的数据插入数据库。每个部分都应包含 1) 有关潜在问题情况和应转义字符的示例,2) 有关如何转义字符的示例,以及 3) 如有必要,稍后如何解码字符。
好处是提供一站式来源,其中包含许多关于转义的示例和解决方案,这样其他用户就不必浏览大量不同的站点和答案以及资源,而这些资源中的示例和解决方案很少。我认为那会很棒。
这张图表到目前为止看起来还不错 http://www.the-art-of-web.com/javascript/escape/
最佳答案
我自己总是对用户数据使用“POST”,而不是“GET”,下面的讨论反射(reflect)了这一点,但您仍然可以使用我在下面所说的任何一种方式的大约 90%。所以这里...
一般规则:转义数据时不要“提前考虑”。只进行立即必要的转换。典型示例:在插入数据库时不要转义为 HTML,因为你最终会得到,例如,'&' 变成 '&'经过几次往返。
一般规则:始终使用 UTF-8。如果有人第一次从其中包含 unicode 省略号的电子邮件中进行复制粘贴,您将为此感激不尽。 (您会惊讶于这种情况发生的频率。)需要典型的设置;这可能因 PHP/MySQL/HTML 版本而异:
一般规则:只有五个地方可以放置未经处理(尽管已正确转义)的用户数据:
如果您想将用户数据放在任何其他 位置,则必须对其进行清理。这超出了问题的范围,但在典型情况下,您可以使用正则表达式用下划线替换任何不是 ASCII 字母或数字的内容。在唯一性很重要的情况下,如文件名或 HTML 的“id”属性,必须做额外的工作以确保经过清理的名称是唯一的(例如,确保在 'a^b' 和 'a&b' 时发生的冲突' 都被 sanitizer 为 'a_b' 已解决)。典型的解决方案类似于:
filename = original_filename;
while(already_exists(filename)) {count++; filename = original_filename + count;}
最后,我要回答的重点:用于将数据移入和移出未修改用户数据可以移至的五个特殊位置的特定转义函数:
PHP 变量 -> 数据库字段:PDO 准备语句:
$stmt = $db->prepare('insert into roundtrip (id, name) values (NULL, :data)');
$stmt->execute(array('data' => $_POST['name']));
数据库字段 -> PHP 变量:无需转义,但使用 PDO 准备语句对查询值进行转义:
$stmt = $db->prepare('select id, name from roundtrip where name = :data');
$stmt->execute(array('data' => $_POST['name'])); // User data needs escaping.
while ($result = $stmt->fetch()) {
echo $result['name']; // DB result doesn't.
}
PHP 变量 -> Javascript 变量:json_encode:
var data = <?php echo json_encode(data); ?>;
PHP 变量 -> HTML 文本节点或表单值:htmlspecialchars:
<div><?php echo htmlspecialchars(data); ?></div>
<input type="text" name="name" value="<?php echo htmlspecialchars(data); ?>"/>
Javascript <-> HTML textNode 或表单值:浏览器内置的 textNode 和 .value 属性/函数:
data = source_div.textContent; // Firefox
data = source_div.innerText; // Other browsers
target_div.textContent = data; // Firefox
target_div.innerText = data; // Other browsers
// To/from form element.
data = source_form.value;
target_form.value = data;
// Append to element.
target_div.appendChild(document.createTextNode(data)); // All browsers
// jQuery textNode
data = $('#source_div_id').text();
$('#target_div_id').text(data);
// jQuery form value
data = $('#source_form_id').val();
$('#target_form_id').val(data);
用这样的字符串重复往返测试,以确保它始终通过整个 HTML->PHP->DB->PHP->[Javascript->]HTML 循环,每次都完全相同:
&ДЖäüöéè<script>…</script>™<i>bold</i>
这是我的脚本,用于测试以何种方式转义;它显然需要一个数据库、一个名称为“roundtrip”、列为“id”和“name”的表,以及在运行之前创建 id=1 的单行:
<?php
$db = new PDO("mysql:host=$host;dbname=$dbname", $db_user, $db_password);
$stmt_insert = $db->prepare('
update
roundtrip
set
name = :name
where
id = 1
');
$stmt_select = $db->prepare('
select
name
from
roundtrip
where
id = 1
');
if ($_POST['do'] == 'edit') {
$stmt_insert->execute(array('name' => $_POST['name']));
}
$stmt_select->execute();
while ($result = $stmt_select->fetch()) {
$data = $result['name'];
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Roundtrip test</title>
<script type="text/javascript" src="/js/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
function copydiv() {
// Non-jquery:
//var source = document.getElementById('divdata');
//var target = document.getElementById('copydiv');
//if (typeof(source.textContent) != "undefined") {
// target.textContent = source.textContent;
//} else {
// target.innerText = source.innerText;
//}
// jquery:
$('#copydiv').text($('#divdata').text());
}
function copyform() {
// Non-jquery:
//var source = document.getElementById('formdata');
//var target1 = document.getElementById('copyform1');
//var target2 = document.getElementById('copyform2');
//if (typeof(source.textContent) != "undefined") {
// target1.textContent = source.value;
//} else {
// target1.innerText = source.value;
//}
//target2.value = source.value;
// jquery:
$('#copyform1').text($('#formdata').val());
$('#copyform2').val($('#formdata').val());
}
function copyjson() {
var data = <?php echo json_encode($data); ?>;
// Non-jquery:
//var target = document.getElementById('copyjson');
//if (typeof(target.textContent) != "undefined") {
// target.textContent = data;
//} else {
// target.innerText = data;
//}
// jquery:
$('#copyjson').text(data);
}
</script>
</head>
<body>
<div>Data: <span id="divdata"><?php echo htmlspecialchars($data); ?></span></div>
<div>JS div copy: <span id="copydiv"/></div>
<div>JS form copy: <span id="copyform1"/></div>
<div>JSON copy: <span id="copyjson"/></div>
<form method="POST">
<input type="hidden" name="do" value="edit"/>
<input type="text" name="name" id="formdata" value="<?php echo htmlspecialchars($data); ?>"/>
<input type="text" id="copyform2"/>
<input type="button" value="Copy div" onclick="copydiv();"/>
<input type="button" value="Copy form" onclick="copyform();"/>
<input type="button" value="Copy json" onclick="copyjson();"/>
<input type="submit"/>
</form>
</body>
</html>
关于php - 关于转义用户提交的 html、javascript 和 PHP 内容的概述和流程图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399221/
我有一个 javascript 从用户输入中读取的 URL。这是 JavaScript 代码的一部分: document.getElementById("Snd_Cont_AddrLnk_BG").v
我将如何在 javascript 中转义斜杠// var j = /^(ht|f)tp(s?)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$;/ 最佳答案 使用 \ 进行转
在解析到这样的对象之前,我要转义 & 和 =: var obb = parseJSON('{"' + text.replace(/&/g, "\",\"").replace(/=/g,"\":\"")
我正在使用 freemarker 生成一个 freemarker 模板。但我需要一些方法来转义 freemarker 标签。 我将如何逃脱 标签或 ${expression} ? 最佳答案 您也可以使
我正在尝试匹配方括号,即 excel 中正则表达式 VBA 中的 []。我正在尝试使用以下代码,但它不起作用。 Public Function IsSpecial(s As String) As L
我通过设置将 PowerShell 添加到我的上下文菜单中: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\she
我需要转义 $,因此我需要将所有出现的 $ 替换为 \$ 所以我写了这个方法: // String#replaceAll(String regex, String replacement) publi
我正在格式化我的问题。非常遗憾。这是我的问题的摘要 在 JSP 中我有一个字段 我输入的值类似于“cQN==ujyRMdr+Qi8dO9Xm*eRun+ner==aLTyt?aKmGI” 实际行动
我有一个文本文件,其内容是C:\temp 我想要值 C:\temp替换为从变量定义的不同值 此外,将从批处理文件(windows .cmd)中调用 perl oneliner set CMDDIR=C
有没有办法使用 jTemplates 来转义 {$,这样我就可以在 onBlur 中使用内联 javascript,例如 telegraaf 在 processTemplate 之后得到这个: 谢谢
我正在尝试将 wget 与包含“#”符号的 url 一起使用。无论我做什么来逃避这个角色,它都不起作用。我用过\、' 和 "。但它们都不起作用。有人有什么建议吗? 谢谢! 最佳答案 如果您真的想让它有
我想知道如何从数据库中回显带有 $ 符号的字符串。此时,数据库中的值“Buy one for $5.00”将转换为“Buy one for .00”。 假设该字段的名称为 title,值为 Buy o
我在 mySQL 中有一个查询,旨在返回我们网站上使用的搜索词。是的,这是一个标签云,是的,我知道它是一条鲻鱼 :) 我们有一个管理页面,管理员可以在其中查看搜索词并选择将它们排除在云端之外。这些词进
我有一个文本区域。在其点击事件上。我将其插入数据库中,然后将其显示为元素列表中的第一个元素。问题是。如果我输入""在textarea中,jquery无法正确显示。它显示为空。代码是 var note
我想知道是否有某种字符串前缀,这样 cstring 就可以按原样使用,而不需要我转义所有字符。我不是 100% 确定。我记得一些关于在字符串前加上 @ 符号( char str[] = @"some\
这个问题在这里已经有了答案: How do I escape curly-brace ({}) characters in a string while using .format (or an f
C/C++编译器如何操作源代码中的转义字符["\"]?如何编写用于处理该字符的编译器语法?遇到那个字符后,编译器会做什么? 最佳答案 大多数编译器分为几个部分:编译器前端称为 lexical anal
我计划接受用户输入,并将其插入到一个 div 中 user_content 一个用户提供内容,另一个用户接收内容。 我认为我会遵循的建议来自 https://www.owasp.org/index.p
我有一个这种形式的 url - http:\\/\\/en.wikipedia.org\\/wiki\\/The_Truman_Show。我怎样才能使它成为正常的网址。我试过使用 urllib.unq
我有一个带有转义数据的字符串 escaped_data = '\\x50\\x51' print escaped_data # gives '\x50\x51' 什么 Python 函数会对其进行反转
我是一名优秀的程序员,十分优秀!