阅读:4430 次 编辑日期:2013-11-02
<?php $str = "uw3c"; echo md5($str); ;?> 输出: dcb3a31141489a9640a6a03e430cf5b1
<script> alert("uw3c.com"); </script>那么这个页面会有个提示框 alert("uw3c.com"),这个大家都知道。 那么如果我在新浪微博发布一条状态:<script>alert("uw3c.com")</script>会有提示框alert吗?当然不会,如果这样的话,我的所有好友在看到这条状态的时候,他们的页面都会有个提示框alert,这岂不是很恶心!那么为什么没有提示框alert出现呢?因为像"<"、">"这些字符已经被转义了,那么是如何转义的呢?
/"|&|'|<|>|[\x00-\x20]|[\x7F-\xFF]|[\u0100-\u2700]/g;转义的代码非常简单,这个方法是把这些标签转换成“实体编号”。当然也可以用别的办法转换成“实体名称”,但是实体名称并不能保证所有浏览器都能识别,代码如下:
var uw3ceCode = /"|&|'|<|>|[\x00-\x20]|[\x7F-\xFF]|[\u0100-\u2700]/g; function encodeHtml(s){ return (typeof s != "string") ? s : s.replace(uw3ceCode, function($0){ var c = $0.charCodeAt(0), r = [""]; c = (c == 0x20) ? 0xA0 : c; r.push(c); r.push(";"); return r.join(""); }); } encodeHtml("uw3c")
<?php $str = "uw3c"; echo htmlentities($str, ENT_COMPAT); ?>
<?php $user = $_POST['user'] $password = $_POST['pwd'] $sql = mysql_query("SELECT * FROM users WHERE user='$user' AND password='$password'"); ?>那么如果用户提交的表单内容为:
$_POST['user'] = 'uw3c'; $_POST['pwd'] = "' OR ''='";那么上面那句MYSQL语句就会改为:
$sql = mysql_query("SELECT * FROM users WHERE user='uw3c' AND password='' OR ''=''");这样的话,用户'uw3c'就可以登录了,因为没有判断密码的正确与否。那么应该如何避免这个问题呢?,这用到了MYSQL的 mysql_real_escape_string()方法,来看下面的代码:
<?php $user = mysql_real_escape_string($_POST['user']); $pwd = mysql_real_escape_string($_POST['pwd']); $sql = mysql_query("SELECT * FROM users WHERE user='$user' AND password='$password'"); ?>这样,就会把一些字符(例如 ‘, “等)进行转义,从而起到安全防护的作用。 网站安全是很复杂,很任重道远的事情,以后我们会更加详细的讲解一下。