For better accuracy, it would perhaps be better to use the dx/dy/dz arguments of the testfor command instead of the range.
With the range, the player will be detected when he's in front of the portal, not inside (you can also resolve this problem by reducing the range and moving up the searchpoint, but it's not that good if the portal has to be bigger than 3x3)
Something along the line of
/testfor @p[x=lower_corner_x,y=lower_corner_y,z=lower_corner_z,dx=2,dy=2]
would work great for a 3x3 portal, only detecting the player when he's inside it. (Note that the dx has to be replaced by dz depending on the portal's direction)
But well, if the accuracy is not an issue, then range is good too